zoukankan      html  css  js  c++  java
  • 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()#可以设置更多字段
    
    作 者:郭楷丰
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角 推荐一下。您的鼓励是博主的最大动力!
    自 勉:生活,需要追求;梦想,需要坚持;生命,需要珍惜;但人生的路上,更需要坚强。带着感恩的心启程,学会爱,爱父母,爱自己,爱朋友,爱他人。
  • 相关阅读:
    code war 天天一练(4)
    code war 天天一练(3)
    code war 天天一练(2)
    code war 天天一练(1)
    手写promise
    JSON序列化和反序列化
    SqlBulkCopy高效插入数据
    C#反射方法示例
    《将博客搬至CSDN》
    PHP学习笔记——Php文件引入
  • 原文地址:https://www.cnblogs.com/guokaifeng/p/11056224.html
Copyright © 2011-2022 走看看