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設置級聯關係
"""
  • 表結構

  • 級聯刪除 (設置級聯的爲弱勢方,關聯方刪除,本身也會刪除,本身刪除,卻不影響對方)mysql

    刪除南方出版社,對應的 大胖小胖減肥日記圖書也被刪除了sql

  • 級聯刪除,刪圖書 刪除內心學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()#能夠設置更多字段
相關文章
相關標籤/搜索