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 相关文章推荐
python里将list中元素依次向前移动一位
Sep 12 Python
python获取当前计算机cpu数量的方法
Apr 18 Python
Python中super的用法实例
May 28 Python
Python实现通讯录功能
Feb 22 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
python实现QQ邮箱发送邮件
Mar 06 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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
php 静态页面中显示动态内容
2009/08/14 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
Python属性和内建属性实例解析
2020/01/14 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
计算机专业应届毕业生自荐信
2013/09/26 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
事假请假条范文
2014/04/11 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
公务员考察材料范文
2014/12/23 职场文书
美术教师个人工作总结
2015/02/06 职场文书
2015年环保局工作总结
2015/05/22 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis