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

目录

配置数据库

  • 在Django项目的settings.py文件中,配置数据库连接信息:
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "你的数据库名称",  # 需要自己手动创建数据库
        "USER": "数据库用户名",
        "PASSWORD": "数据库密码",
        "HOST": "数据库IP",
        "PORT": 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

数据库迁移命名

#数据库迁移 命令(建议一起执行)
python manage.py makemigrations
python manage.py migrate
#每次对models.py文件操作,都尽量执行迁移命名

创建表结构

  • 例子 出版社表 图书表
  • 出版社表
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()#可以设置更多字段

作 者:郭楷丰

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏穆书伟

软件工程师树莓派获取室内温湿度的坎坷之旅

前几天公司接受到了一份来自阿里飞天园区,IOT部门的小礼物。由于上司比较忙,无暇去顾及。

16610
来自专栏北京宏哥

python3+ selenium3开发环境搭建-手把手教你安装python(详细)

基于python3和selenium3做自动化测试,俗话说:工欲善其事必先利其器;没有金刚钻就不揽那瓷器活,磨刀不误砍柴工,因此你必须会搭建基本的开发环境,掌握...

8530
来自专栏北京宏哥

安装需要的第三方库时,命令行输入pip提示不是内部或外部命令

在做Python开发时,安装需要的第三方库时,大多数人喜欢选择在命令行用pip进行安装。

42330
来自专栏北京宏哥

Pycharm使用教程(三)(非常详细,非常实用)

1、 汉化:把resources_zh.jar拷贝到PyCharm的安装目录下的lib目录,重启Pycharm即可。

24230
来自专栏北京宏哥

python +selenium识别不来click事件,出现报错

elem = browser.find_element_by_id("txtAccount") # Find the query box elem.send_k...

12020
来自专栏北京宏哥

Win10下python3和python2同时安装并解决pip共存问题 Win10下python3和python2同时安装并解决pip共存问题

特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。

8830
来自专栏北京宏哥

关于pycharm安装出现的interpreter field is empty,无法创建项目存储位置

关于pycharm安装出现的interpreter field is empty,无法创建项目存储的位置。如图:

25130
来自专栏北京宏哥

Pycharm使用教程(四)-安装python依赖包(非常详细,非常实用)

在做python开发时,需要很多依赖包,如果已经安装pip,安装依赖包,可以通过命令行;没有安装的,也可以通过PyCharm安装。

39020
来自专栏北京宏哥

Python冒号的解释

1. “没什么首次没有为第二个,跳了三个”。它得到的切片序列的每一个第三个项目。 扩展片是你想要的。新在Python 2.3 2. Python的序列切片地址...

22920
来自专栏北京宏哥

手把手的教你安装PyCharm --Pycharm安装详细教程(一)(非常详细,非常实用)

pycharm是Jetbrains家族中的一个明星产品,Jetbrains开发了许多好用的编辑器,包括Java编辑器(IntelliJ IDEA)、JavaSc...

1K30

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励