Django中每一個模型model都對應于數據庫中的一張表,每個模型中的字段都對應于數據庫表的列。方便的是,django可以自動生成這些create table, alter table, drop table的操作。其次Django為咱們也提供了后臺管理模塊(Django-Admin),主要功能是通過后臺管理來實現客戶端的功能,可以對數據進行增刪改查。也可以通過該功能進行二次開發
Django中的mysql配置
在上期內容,我們了解了settings.py配置信息的內容,其中DATABASES是用來管理數據庫配置的,默認是sqlite3數據庫,所以我們需要將其修改成mysql數據庫。
# Database# https://docs.djangoproject.com/en/2.0/ref/settings/#databases# 數據庫配置 默認的數據庫為sqlite# DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# }# }DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 數據庫引擎 'NAME': 'django_mysql', # 數據庫名 'USER': 'root', # 賬號 'PASSWORD': 'root', # 密碼 'HOST': '127.0.0.1', # HOST 'POST': 3306, # 端口 }}
字段名稱代碼中都添加了相應說明,ENGINE為MYSQL數據庫引擎,這個當然不會憑空出現,需要我們去安裝
安裝pymysql
pip3 install pymysql
項目中配置
在最開始的項目包下的 init .py中進行如下配置
"""setting中的配置默認為sqlite3數據庫 當需要修改成MySql時并且在setting.py的同級目錄的__init__.py 加入如下配置否則會報錯: Error loading MySQLdb module."""import pymysqlpymysql.install_as_MySQLdb()
如果mysql配置信息錯誤(用戶名、密碼、host等)控制臺會報如下異常
pymysql.err.OperationalError: (1045, "Access denied for user 'ROOT'@'localhost' (using password: YES)")
在app文件的models.py文件中 創建Student(學生信息)和StudentUnion(社團信息)
models.py:數據模塊,用于數據庫設計
"""創建學生信息表模型"""from django.db import models""" 該類是用來生成數據庫的 必須要繼承models.Model"""class Student(models.Model): """ 創建如下幾個表的字段 """ # 學號 primary_key=True: 該字段為主鍵 studentNum = models.CharField('學號', primary_key=True, max_length=15) # 姓名 字符串 最大長度20 name = models.CharField('姓名', max_length=20) # 年齡 整數 null=False, 表示該字段不能為空 age = models.IntegerField('年齡', null=False) # 性別 布爾類型 默認True: 男生 False:女生 sex = models.BooleanField('性別', default=True) # 手機 unique=True 該字段唯一 mobile = models.CharField('手機', unique=True, max_length=15) # 創建時間 auto_now_add:只有在新增的時候才會生效 createTime = models.DateTimeField(auto_now_add=True) # 修改時間 auto_now: 添加和修改都會改變時間 modifyTime = models.DateTimeField(auto_now=True) # 指定表名 不指定默認APP名字——類名(app_demo_Student) class Meta: db_table = 'student'"""學生社團信息表"""class studentUnion(models.Model): # 自增主鍵, 這里不能設置default屬性,負責執行save的時候就不會新增而是修改元素 id = models.IntegerField(primary_key=True) # 社團名稱 unionName = models.CharField('社團名稱', max_length=20) # 社團人數 unionNum = models.IntegerField('人數', default=0) # 社團負責人 關聯Student的主鍵 即studentNum學號 一對一的關系,on__delete 屬性在django2.0之后為必填屬性后面會介紹 unionRoot = models.OneToOneField(Student, on_delete=None) class Meta: db_table = 'student_union'"""OneToOneField: 一對一ForeignKey: 一對多ManyToManyField: 多對多(沒有ondelete 屬性)"""
新聞熱點
疑難解答