Django中每一個模型model都對應于數(shù)據(jù)庫中的一張表,每個模型中的字段都對應于數(shù)據(jù)庫表的列。方便的是,django可以自動生成這些create table, alter table, drop table的操作。其次Django為咱們也提供了后臺管理模塊(Django-Admin),主要功能是通過后臺管理來實現(xiàn)客戶端的功能,可以對數(shù)據(jù)進行增刪改查。也可以通過該功能進行二次開發(fā)
Django中的mysql配置
在上期內(nèi)容,我們了解了settings.py配置信息的內(nèi)容,其中DATABASES是用來管理數(shù)據(jù)庫配置的,默認是sqlite3數(shù)據(jù)庫,所以我們需要將其修改成mysql數(shù)據(jù)庫。
# Database# https://docs.djangoproject.com/en/2.0/ref/settings/#databases# 數(shù)據(jù)庫配置 默認的數(shù)據(jù)庫為sqlite# DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# }# }DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 數(shù)據(jù)庫引擎 'NAME': 'django_mysql', # 數(shù)據(jù)庫名 'USER': 'root', # 賬號 'PASSWORD': 'root', # 密碼 'HOST': '127.0.0.1', # HOST 'POST': 3306, # 端口 }}
字段名稱代碼中都添加了相應說明,ENGINE為MYSQL數(shù)據(jù)庫引擎,這個當然不會憑空出現(xiàn),需要我們?nèi)グ惭b
安裝pymysql
pip3 install pymysql
項目中配置
在最開始的項目包下的 init .py中進行如下配置
"""setting中的配置默認為sqlite3數(shù)據(jù)庫 當需要修改成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文件中 創(chuàng)建Student(學生信息)和StudentUnion(社團信息)
models.py:數(shù)據(jù)模塊,用于數(shù)據(jù)庫設計
"""創(chuàng)建學生信息表模型"""from django.db import models""" 該類是用來生成數(shù)據(jù)庫的 必須要繼承models.Model"""class Student(models.Model): """ 創(chuàng)建如下幾個表的字段 """ # 學號 primary_key=True: 該字段為主鍵 studentNum = models.CharField('學號', primary_key=True, max_length=15) # 姓名 字符串 最大長度20 name = models.CharField('姓名', max_length=20) # 年齡 整數(shù) null=False, 表示該字段不能為空 age = models.IntegerField('年齡', null=False) # 性別 布爾類型 默認True: 男生 False:女生 sex = models.BooleanField('性別', default=True) # 手機 unique=True 該字段唯一 mobile = models.CharField('手機', unique=True, max_length=15) # 創(chuàng)建時間 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屬性,負責執(zhí)行save的時候就不會新增而是修改元素 id = models.IntegerField(primary_key=True) # 社團名稱 unionName = models.CharField('社團名稱', max_length=20) # 社團人數(shù) unionNum = models.IntegerField('人數(shù)', default=0) # 社團負責人 關聯(lián)Student的主鍵 即studentNum學號 一對一的關系,on__delete 屬性在django2.0之后為必填屬性后面會介紹 unionRoot = models.OneToOneField(Student, on_delete=None) class Meta: db_table = 'student_union'"""OneToOneField: 一對一ForeignKey: 一對多ManyToManyField: 多對多(沒有ondelete 屬性)"""
新聞熱點
疑難解答