Django:模型model和数据库mysql(一)
以一個(gè)栗子嘗試來記錄:
兩個(gè)表存儲在數(shù)據(jù)庫中,BookInfo表示書,HeroInfo表示人物。一本書中有多個(gè)人物
在MySQL中新建一個(gè)數(shù)據(jù)庫Django1,不用創(chuàng)建表,用Django模型來配置數(shù)據(jù)庫
1、數(shù)據(jù)庫ER圖
2、數(shù)據(jù)庫配置
在settings.py中進(jìn)行數(shù)據(jù)庫的配置。
留意:django默認(rèn)連接的是sqlite3數(shù)據(jù)庫。我們需要修改成MySQL
django1/settings.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django1','USER': 'root','PASSWORD': '123', 'HOST': 'localhost', 'PORT': '3306' } }PS:
在Python3中用MySQLdb連接MySQL會猜到一個(gè)坑:MySQLdb 只適用于python2.x,發(fā)現(xiàn)pip裝不上。它在py3的替代品是:import pymysql
而Django默認(rèn)的還是使用MySQLdb:執(zhí)行會報(bào):ImportError: No module named 'MySQLdb'
以下為安裝MySQLdb的解決方法:
方法一:安裝mysqlclient 1.3.10版本
pip install mysqlclient==1.3.10方法二:
在站點(diǎn)的?__init__.py?文件中添加
import pymysql pymysql.install_as_MySQLdb()3、創(chuàng)建應(yīng)用
在一個(gè)工程里面可以創(chuàng)建多個(gè)應(yīng)用(app)。每個(gè)應(yīng)用對應(yīng)一種業(yè)務(wù)
# 創(chuàng)建應(yīng)用的命令 python manage.py startapp booktest?
?執(zhí)行后,多了一個(gè)booktest目錄。該目錄就是這個(gè)應(yīng)用所在的目錄。
?
4、定義模型類
通過定義模型類去生成數(shù)據(jù)庫。而不是直接寫數(shù)據(jù)庫的表
模型類需要繼承django.db.models.Model類
注意:在模型類中,不需要定義PK(主鍵)的
當(dāng)輸出對象的時(shí)候,系統(tǒng)會調(diào)用__str__()方法(描述對象本身)
booktest/models.py
from django.db import models# Create your models here.class BookInfo(models.Model):# 設(shè)置字段btitle = models.CharField(max_length = 20)bpub_date = models.DateTimeField()def __str__(self):return self.btitleclass HeroInfo(models.Model):# 設(shè)置字段hname = models.CharField(max_length = 10)hgender = models.BooleanField()hcontent = models.CharField(max_length = 1000)hbook = models.ForeignKey(BookInfo, on_delete = models.CASCADE)def __str__(self):return self.hname5、啟動服務(wù)器
在命令行輸入
# 表示啟動django服務(wù)器,默認(rèn)使用8000端口 python manage.py runserver# 使用8080作為端口 python manage.py runserver 8080然后通過瀏覽器端訪問?http://127.0.0.1:8080/
看到django已經(jīng)成功啟動后,此時(shí)數(shù)據(jù)庫django1中多了一個(gè)表django_miggrations
6、生成數(shù)據(jù)庫的表
首先需要激活模型,編輯settings.py文件,在INSTALLED_APPS加上應(yīng)用的名稱(booktest)
django1/settings.py
INSTALLED_APPS = ('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','booktest' )然后生成遷移文件,在命令行輸入
# 然后生成遷移文件,在命令行輸入 python manage.py makemigrations# 此時(shí)在booktest目錄下生成子目錄migrations,里面有0001_initial.py # 0001_initial.py里面系統(tǒng)會主動幫我們的表生成id字段# 執(zhí)行遷移,執(zhí)行SQL語句生成數(shù)據(jù)庫 python manage.py migrate隨后刷新數(shù)據(jù)庫就能在一堆表里看到?booktest_bookinfo和booktest_heroinfo 兩個(gè)表啦
7、測試數(shù)據(jù)操作
# 進(jìn)入django的shell python manage.py shell# 進(jìn)行簡單的測試(帶有django項(xiàng)目的一些配置)導(dǎo)入相關(guān)的包 from booktest.models import BookInfo, HeroInfo from django.utils import timezone from datetime import *# 查詢所有書的信息 BookInfo.objects.all()# 新建一本書的信息 b = BookInfo() b.btitle = '射鳥英雄傳' b.bpub_date = datetime(year = 2018, month = 8, day = 11) b.save()# 查詢某本書的信息 b1 = BookInfo.objects.get(pk = 1) b1.id b1.btitle b1.bpub_date# 刪除書 b1.delete()# 獲取關(guān)聯(lián)集合:(與書有關(guān)的所有人物) b.heroinfo_set.all()# 創(chuàng)建關(guān)聯(lián)的數(shù)據(jù),不用save()都Ok b.heroinfo_set.create(hname='歐陽瘋', hgender=False, hcontent = '蛤蟆功')?
轉(zhuǎn)載于:https://www.cnblogs.com/kumata/p/9643989.html
總結(jié)
以上是生活随笔為你收集整理的Django:模型model和数据库mysql(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: vue中全局引入bootstrap.cs
- 下一篇: iOS开发面试题整理