django 数据库建表流程,与表结构
程序员文章站
2022-04-29 17:53:49
[TOC] 配置数据库 在Django项目的settings.py文件中,配置数据库连接信息: 在与Django项目同名的目录下的 py文件中写如下代码,告诉Django使用pymysql模块连接MySQL数据库: 注:数据库迁移的时候出现一个警告 在配置中多加一个OPTIONS参数:Django官 ......
配置数据库
- 在django项目的settings.py文件中,配置数据库连接信息:
databases = { "default": { "engine": "django.db.backends.mysql", "name": "你的数据库名称", # 需要自己手动创建数据库 "user": "数据库用户名", "password": "数据库密码", "host": "数据库ip", "post": 3306 } }
- 在与django项目同名的目录下的
__init__.
py文件中写如下代码,告诉django使用pymysql模块连接mysql数据库:
import pymysql pymysql.install_as_mysqldb()
- 注:数据库迁移的时候出现一个警告
warnings: ?: (mysql.w002) mysql strict mode is not set for database connection 'default' hint: mysql's strict mode fixes many data integrity problems in mysql, such as data truncation upon insertion, by escalating warnings into errors. it is strongly recommended you activate it.
- 在配置中多加一个options参数:django官网解释
#解决办法一 options: {'init_command': "set sql_mode='strict_trans_tables'"}, #解决办法二 #去设置 mysql文件的的my.ini sql-mode="strict_trans_tables,no_auto_create_user,no_engine_substitution" #在输入命令重启mysql(windos系统) net stop mysql net start mysql
创建表结构
例子 出版社表 图书表
- 出版社表
from django.db import models class publisher(models.model): pid = models.autofield(primary_key=true) name = models.charfield(max_length=32, unique=true) """ 出版社 表设计 表名 publisher pid为出版社的id,设置为主键,默认为int类型 primary_key=true 字段名为pid name为出版社的名字,限制字符长度32,设置唯一属性unique=true 字段名为name 还可以添加,电话,办公地址等字段,我这里就不添加了 """ class book(models.model): title = models.charfield(max_length=32) pub = models.foreignkey("publisher",on_delete=models.cascade) """ 图书 表设计 表名 book title为书名 限制字符长度32 put为外键 models.foreignkey ("publisher")关联publisher表 on_delete=models.cascade设置级联关系 """
- 表结构
-
级联删除 (设置级联的为弱势方,关联方删除,自己也会删除,自己删除,却不影响对方)
删除南方出版社,对应的 大胖小胖减肥日记图书也被删除了
- 级联删除,删图书 删除心里学1500问 看看对出版社表有影响吗?
学生 班级 表结构
class class(models.model): cid = models.autofield(primary_key=true) cname = models.charfield(max_length=32, unique=true) """ cid 主键 cname 约束32位的字符,unique=true 约束唯一 """ class student(models.model): sid = models.autofield(primary_key=true) s_name = models.charfield(max_length=32,null=false) gender = models.charfield(max_length=2,default='男') class_id = models.foreignkey("class",on_delete=models.cascade) """ sid 主键 s_name 字符 32位 非空约束 gendef 字符 2位 默认设置为男 class 外键 关联class表 , 级联设置 """
多表关的设置
- 还以出版社 图书 为例加上作者
#要实现作者表关联出版社和书记表,创建第四章表,来建立练习 #第一种 django帮我们生成第三张表 class author(models.model): name = models.charfield(max_length=32) books = models.manytomanyfield('book') # 不在author表中生产字段,自动生成第三张表 """ name 作者名字 32为字符 books book和author多对多的关系。books是author跟book关联的所有对象。books的作用是在 author和book中创建一个中间的关系对象,放在第三张表中,再根据这个中间的关系来获取book中关联的对象 """
- 查看数据库
自创建关联表方法
class authorbook(models.model): author = models.foreignkey(author, on_delete=models.cascade) book = models.foreignkey(book, on_delete=models.cascade) date = models.datefield() """ author 关联 author作者表 外键 级联设置 book 关联 book图书表 外键 级联设置 date 日期属性 可以添加更多字段,就操作比麻烦 """ #调用方法 author_obj = models.author.objects.create(name=author_name) # 只插入book表中的内容 author_obj.books.set(books) # 设置作者和书籍多对多的关系
自建表 和 manytomanyfield 联合使用
class author(models.model): name = models.charfield(max_length=32) books = models.manytomanyfield('book',through='authorbook') # through='authorbook' 不在author表中生产字段, 也不生产第三张表 class authorbook(models.model): author = models.foreignkey(author, on_delete=models.cascade)#外键关联 author表 级联设置 book = models.foreignkey(book, on_delete=models.cascade)#外键关联 book表 级联设置 date = models.datefield()#可以设置更多字段
上一篇: 我是如何从零基础自学到找到工作经过
下一篇: AI简单绘制一个漂亮的多肉植物教程