配置數據庫
- 在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()#可以設置更多字段