python django orm 建表

1.命令行创建django文件

进入指定目录
django-admin startproject item
cd item
python manage.py startapp item0

2.编写sql语句

setting

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'item0',
]

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql',
        'NAME':'practice',
        'USER':'root',
        'PASSWORD':'',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }
}
init.py  admin.py 同级文件

import pymysql
pymysql.install_as_MySQLdb()
models.py

from django.db import models
# Create your models here.
class Book(models.Model):
    name = models.CharField(max_length=20)
    price = models.IntegerField()
    pub_date = models.DateField()
运行命令
python manage.py makemigrations
python manage.py migrate
### 关于ORM创建时外键列未生成的解决方案 当使用ORM工具(如Hibernate、Django ORM或其他框架)创建数据库时,如果发现外键列未能成功生成,通常可能是由以下几个原因引起的: #### 1. 配置错误 在某些情况下,开发者可能没有正确配置外键字段的相关属性。例如,在Hibernate中,`@JoinColumn` 注解用于指定外键关系。如果没有显式声明 `foreignKey` 属性,则可能导致外键无法正常生成。 对于 Hibernate 中的情况,可以通过如下方式确保外键被正确定义: ```java @Entity public class ChildEntity { @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "parent_id", foreignKey = @ForeignKey(name = "FK_CHILD_PARENT")) private ParentEntity parent; } ``` 上述代码片段显示了如何通过 `@ForeignKey` 明确指定外键名称来强制生成外键[^1]。 --- #### 2. 数据库迁移脚本冲突 在 Django 或其他基于 Python 的框架中,如果执行 `python manage.py migrate` 命令时报错提示某张已存在,这通常是由于之前的迁移文件残留或者手动修改过数据库结构所致[^2]。此时应清理旧的迁移记录并重新生成新的迁移文件。 具体操作步骤包括但不限于以下几点: - 删除现有的迁移目录下的 `.pyc` 文件; - 使用命令 `python manage.py makemigrations --empty your_app_name` 创建一个新的空迁移文件; - 修改该空迁移文件以适应当前需求后再运行 `migrate` 命令完成同步过程。 需要注意的是,若涉及外键约束失败的问题,则需先解除现有外键绑定再继续后续动作。 --- #### 3. 不同ORM框架的行为差异 不同ORM框架对外键的支持程度有所不同。比如 PHP 的 Doctrine ORM 提供了一套完善的事件机制允许用户自定义行为逻辑[^3];而在 CUBA 框架里虽然也广泛采用了 JPA 和 Spring 技术栈构其核心功能模块,但在实际应用过程中仍可能存在因延迟加载策略不当而导致性能瓶颈等问题[^4]。 因此,在选用特定技术方案之前应当充分评估目标平台特性及其适用场景范围。 --- #### 4. 自定义SQL支持 针对复杂业务场景下难以单纯依靠标准API实现的需求,许多现代Web开发框架都提供了扩展接口以便灵活应对挑战。就拿 Django 来说吧,它除了常规CRUD之外还引入三种方法用来执行原生SQL语句[^5]: - **extra**: 对查询结果集施加额外条件过滤。 - **raw**: 返回符合预期类型的实例列而非字典形式的结果集合。 - **execute**: 完全脱离高层封装直接操控底层资源。 利用这些高级选项可以帮助我们绕开传统限制从而达成目的。 --- ### 总结 综上所述,要解决ORM期间遇到的外键缺失现象可以从调整实体类映射规则入手,同时注意保持版本控制系统整洁有序以防意外干扰发生。另外也要熟悉所选工具链内部工作机制原理这样才能更好地驾驭它们服务于我们的项目开发实践当中去。 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值