Mysql数据库反向生成Django里面的models指令方式


Posted in Python onMay 18, 2020

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,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类属性,存在问题,如下图所示:

Mysql数据库反向生成Django里面的models指令方式

解决方案:把user_id 改成user即可,user = models.ForeignKey(Visitors,on_delete=models.CASCADE,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指令方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
对Python中画图时候的线类型详解
Jul 07 Python
python django model联合主键的例子
Aug 06 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
Python同时处理多个异常的方法
Jul 28 Python
详解Python中第三方库Faker
Sep 25 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python 获取域名到期时间的方法步骤
Feb 10 Python
Jupyter notebook快速入门教程(推荐)
May 18 #Python
解决django 向mysql中写入中文字符出错的问题
May 18 #Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 #Python
python实现人像动漫化的示例代码
May 17 #Python
django日志默认打印request请求信息的方法示例
May 17 #Python
使用pyecharts1.7进行简单的可视化大全
May 17 #Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 #Python
You might like
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
Node.js事件驱动
2015/06/18 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
python模块restful使用方法实例
2013/12/10 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
银行办理业务介绍信
2014/01/18 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
社区食品安全实施方案
2014/03/28 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
在项目中使用redis做缓存的一些思路
2021/09/14 Redis
Java字符串逆序方法详情
2022/03/21 Java/Android