1. 程式人生 > 資料庫 >Mysql資料庫反向生成Django裡面的models指令方式

Mysql資料庫反向生成Django裡面的models指令方式

python manage.py inspectdb

python manage.py inspect > app/models.py

補充知識:Django框架MySQL資料庫到models模型的對映關係

一、前言

我的資料庫已經用MySQL Workbench設計好了,也插入了一些測試資料,現在開始在Django中設計models模型。本以為順風順水,沒想到也遇到一些bug,現在記錄一下踩坑填坑過程。

二、設計models模型

1. 如果資料庫中表的數量比較多,可以先匯出,然後檢視對應表的欄位,根據不同表設計不同的models類,根據同一張表的不同欄位設計類屬性。

用MySQL Workbench匯出資料庫操作:

Mysql資料庫反向生成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,也是外來鍵,關聯了visitors表的user_id主鍵

3. 設計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,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,為資料庫中的表名
  db_table = 'credits'

注意:

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

Mysql資料庫反向生成Django裡面的models指令方式

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

Mysql資料庫反向生成Django裡面的models指令方式

4. time_credits_buy = models.DateTimeField('購買的時間',auto_now_add=True),time_credits_buy類屬性是時間型別,資料庫中credits表對應的也是時間型別。

注意,剛開始,我的資料庫中把 time_credits_buy 欄位設定為varchar(64)型別,而models模型中設定為時間型別,兩邊的型別不一致出現bug,如下圖所示:

Mysql資料庫反向生成Django裡面的models指令方式

特別注意,資料庫中的欄位型別,一定要和models定義的類屬性型別一致,否則報錯,有的時候很難發現bug

三、Django自動生成models

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

如果資料庫表已經存在,執行命令,可以自動生成Models模型,實現models與資料表的對映

以上這篇Mysql資料庫反向生成Django裡面的models指令方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。