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导出数据库操作:

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,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,为数据库中的表名

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('购买的时间',auto_now_add=True),time_credits_buy类属性是时间类型,数据库中credits表对应的也是时间类型。

注意,刚开始,我的数据库中把 time_credits_buy 字段设置为varchar(64)类型,而models模型中设置为时间类型,两边的类型不一致出现bug,如下图所示:

特别注意,数据库中的字段类型,一定要和models定义的类属性类型一致,否则报错,有的时候很难发现bug

三、Django自动生成models

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

如果数据库表已经存在,执行命令,可以自动生成Models模型,实现models与数据表的映射

以上这篇Mysql数据库反向生成Django里面的models指令方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 Mysql数据库反向生成Django里面的models指令方式 的全部内容, 来源链接: utcz.com/z/317960.html

回到顶部