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