Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式
python manage.py inspectdb
或
python manage.py inspect > app/models.py
補(bǔ)充知識:Django框架MySQL數(shù)據(jù)庫到models模型的映射關(guān)系
一、前言
我的數(shù)據(jù)庫已經(jīng)用MySQL Workbench設(shè)計(jì)好了,也插入了一些測試數(shù)據(jù),現(xiàn)在開始在Django中設(shè)計(jì)models模型。本以為順風(fēng)順?biāo)瑳]想到也遇到一些bug,現(xiàn)在記錄一下踩坑填坑過程。
二、設(shè)計(jì)models模型
1. 如果數(shù)據(jù)庫中表的數(shù)量比較多,可以先導(dǎo)出,然后查看對應(yīng)表的字段,根據(jù)不同表設(shè)計(jì)不同的models類,根據(jù)同一張表的不同字段設(shè)計(jì)類屬性。
用MySQL Workbench導(dǎo)出數(shù)據(jù)庫操作:
2. 打開credits.sql文件,credits表的信息是:
CREATE TABLE `credits` ( `user_id` varchar(64) NOT NULL, `credits_total` int(64) DEFAULT '0', `credits_buy` int(64) DEFAULT '0', `time_credits_buy` datetime(6) DEFAULT NULL, `credits_before_day` int(32) DEFAULT '0', `time_sign_before_day` datetime(6) DEFAULT NULL, PRIMARY KEY (`user_id`), CONSTRAINT `credits_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `visitors` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中,credits表字段信息是:user_id,credits_total,credits_buy,time_credits_buy,credits_before_day,time_sign_before_day
主鍵是:user_id,也是外鍵,關(guān)聯(lián)了visitors表的user_id主鍵
3. 設(shè)計(jì)models類
from django.db import models # 積分信息 class Credits(models.Model): # id = models.IntegerField('id主鍵', primary_key=True, auto_created=True) # user_id = models.ForeignKey(Visitors,on_delete=models.CASCADE,primary_key=True) user = models.ForeignKey(Visitors,on_delete=models.CASCADE,primary_key=True) credits_total = models.IntegerField('總積分',default=0) credits_buy = models.IntegerField('購買的積分',default=0) time_credits_buy = models.DateTimeField('購買的時(shí)間',auto_now_add=True) credits_before_day = models.IntegerField('前一天簽到的積分',default=0) time_sign_before_day = models.DateTimeField('前一天簽到的時(shí)間',default=None) class Meta(): # credits,為數(shù)據(jù)庫中的表名 db_table = 'credits'
注意:
注釋中,# user_id = models.ForeignKey(Visitors,on_delete=models.CASCADE,primary_key=True),是我最開始寫的user_id類屬性,存在問題,如下圖所示:
解決方案:把user_id 改成user即可,user = models.ForeignKey(Visitors,on_delete=models.CASCADE,primary_key=True),正確如下圖:
4. time_credits_buy = models.DateTimeField('購買的時(shí)間',auto_now_add=True),time_credits_buy類屬性是時(shí)間類型,數(shù)據(jù)庫中credits表對應(yīng)的也是時(shí)間類型。
注意,剛開始,我的數(shù)據(jù)庫中把 time_credits_buy 字段設(shè)置為varchar(64)類型,而models模型中設(shè)置為時(shí)間類型,兩邊的類型不一致出現(xiàn)bug,如下圖所示:
特別注意,數(shù)據(jù)庫中的字段類型,一定要和models定義的類屬性類型一致,否則報(bào)錯(cuò),有的時(shí)候很難發(fā)現(xiàn)bug
三、Django自動(dòng)生成models
>>> python manage.py inspectdb > app/models.py
如果數(shù)據(jù)庫表已經(jīng)存在,執(zhí)行命令,可以自動(dòng)生成Models模型,實(shí)現(xiàn)models與數(shù)據(jù)表的映射
以上這篇Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python與Appium實(shí)現(xiàn)手機(jī)APP自動(dòng)化測試的示例代碼
本文主要介紹了Python與Appium實(shí)現(xiàn)手機(jī)APP自動(dòng)化測試的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02python解析中國天氣網(wǎng)的天氣數(shù)據(jù)
最近學(xué)習(xí)python 感覺這門腳本語言十分靈活 而且功能十分強(qiáng)大 尤其是他re庫用于正則匹配十分強(qiáng)大,寫了個(gè)例子解析中國天氣網(wǎng)2014-03-03Django web自定義通用權(quán)限控制實(shí)現(xiàn)方法
這篇文章主要介紹了Django web自定義通用權(quán)限控制實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN訓(xùn)練
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN網(wǎng)絡(luò)訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-05-05Django Channels 實(shí)現(xiàn)點(diǎn)對點(diǎn)實(shí)時(shí)聊天和消息推送功能
這篇文章主要介紹了Django Channels 實(shí)現(xiàn)點(diǎn)對點(diǎn)實(shí)時(shí)聊天和消息推送功能,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07python中讀取txt文件時(shí)split()函數(shù)的妙用
這篇文章主要介紹了python中讀取txt文件時(shí)split()函數(shù)的妙用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Python調(diào)用jar包方法實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python調(diào)用jar包方法實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08