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 相关文章推荐
安装dbus-python的简要教程
May 05 Python
在Python中使用成员运算符的示例
May 13 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
Python实现的桶排序算法示例
Nov 29 Python
基于python3实现socket文件传输和校验
Jul 28 Python
详解python中递归函数
Apr 16 Python
python如何将两个txt文件内容合并
Oct 18 Python
Python拼接字符串的7种方式详解
Mar 19 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
Python 实现键盘鼠标按键模拟
Nov 18 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
德劲1103二次变频版的打磨
2021/03/02 无线电
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
javascript引用对象的方法
2007/01/11 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python爬虫之自制英汉字典
2019/06/24 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
python实现梯度法 python最速下降法
2020/03/24 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
举例讲解Python装饰器
2020/12/24 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
客户代表实习人员自我鉴定
2013/09/27 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
赢在执行观后感
2015/06/16 职场文书
军训决心书范文
2015/09/22 职场文书
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers