欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

django  数据库建表流程,与表结构

创建表结构

  • 例子 出版社表 图书表

  • 出版社表
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设置级联关系
"""    
  • 表结构

django  数据库建表流程,与表结构

  • 级联删除 (设置级联的为弱势方,关联方删除,自己也会删除,自己删除,却不影响对方)

    删除南方出版社,对应的 大胖小胖减肥日记图书也被删除了

django  数据库建表流程,与表结构

  • 级联删除,删图书 删除心里学1500问 看看对出版社表有影响吗?

django  数据库建表流程,与表结构

  • 学生 班级 表结构

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  数据库建表流程,与表结构

多表关的设置

  • 还以出版社 图书 为例加上作者
#要实现作者表关联出版社和书记表,创建第四章表,来建立练习

#第一种 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中关联的对象
    """

django  数据库建表流程,与表结构

  • 查看数据库

django  数据库建表流程,与表结构

django  数据库建表流程,与表结构

自创建关联表方法

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()#可以设置更多字段