国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式

瀏覽:7日期:2023-10-15 07:54:34

python manage.py inspectdb

python manage.py inspect > app/models.py

補充知識:Django框架MySQL數(shù)據(jù)庫到models模型的映射關(guān)系

一、前言

我的數(shù)據(jù)庫已經(jīng)用MySQL Workbench設(shè)計好了,也插入了一些測試數(shù)據(jù),現(xiàn)在開始在Django中設(shè)計models模型。本以為順風(fēng)順水,沒想到也遇到一些bug,現(xiàn)在記錄一下踩坑填坑過程。

二、設(shè)計models模型

1. 如果數(shù)據(jù)庫中表的數(shù)量比較多,可以先導(dǎo)出,然后查看對應(yīng)表的字段,根據(jù)不同表設(shè)計不同的models類,根據(jù)同一張表的不同字段設(shè)計類屬性。

用MySQL Workbench導(dǎo)出數(shù)據(jù)庫操作:

Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式

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è)計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(’購買的時間’,auto_now_add=True) credits_before_day = models.IntegerField(’前一天簽到的積分’,default=0) time_sign_before_day = models.DateTimeField(’前一天簽到的時間’,default=None) class Meta(): # credits,為數(shù)據(jù)庫中的表名 db_table = ’credits’

注意:

注釋中,# user_id = models.ForeignKey(Visitors,on_delete=models.CASCADE,primary_key=True),是我最開始寫的user_id類屬性,存在問題,如下圖所示:

Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式

解決方案:把user_id 改成user即可,user = models.ForeignKey(Visitors,on_delete=models.CASCADE,primary_key=True),正確如下圖:

Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式

4. time_credits_buy = models.DateTimeField(’購買的時間’,auto_now_add=True),time_credits_buy類屬性是時間類型,數(shù)據(jù)庫中credits表對應(yīng)的也是時間類型。

注意,剛開始,我的數(shù)據(jù)庫中把 time_credits_buy 字段設(shè)置為varchar(64)類型,而models模型中設(shè)置為時間類型,兩邊的類型不一致出現(xiàn)bug,如下圖所示:

Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式

特別注意,數(shù)據(jù)庫中的字段類型,一定要和models定義的類屬性類型一致,否則報錯,有的時候很難發(fā)現(xiàn)bug

三、Django自動生成models

>>> python manage.py inspectdb > app/models.py

如果數(shù)據(jù)庫表已經(jīng)存在,執(zhí)行命令,可以自動生成Models模型,實現(xiàn)models與數(shù)據(jù)表的映射

以上這篇Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

相關(guān)文章:
主站蜘蛛池模板: 潮州市| 江北区| 伊宁市| 桂平市| 辉南县| 朝阳县| 玉林市| 威海市| 青田县| 巴林右旗| 偏关县| 沁水县| 怀集县| 深泽县| 姚安县| 虹口区| 武功县| 腾冲县| 安泽县| 宜兰市| 永城市| 洛宁县| 都江堰市| 碌曲县| 东阳市| 容城县| 文昌市| 梓潼县| 永丰县| 犍为县| 孝感市| 乌什县| 丹阳市| 绵阳市| 鄂州市| 南充市| 始兴县| 固原市| 那曲县| 平山县| 英吉沙县|