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利用多进程将大量数据放入有限内存的教程
Apr 01 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
python安装mysql的依赖包mysql-python操作
Jan 01 Python
Python 内存管理机制全面分析
Jan 16 Python
Python机器学习三大件之一numpy
May 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
PHP中的串行化变量和序列化对象
2006/09/05 PHP
php 分页类 扩展代码
2009/06/11 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
javascript时区函数介绍
2012/09/14 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
python开发中module模块用法实例分析
2015/11/12 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
Python3.5运算符操作实例详解
2019/04/25 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
中学生社会实践活动总结
2014/07/03 职场文书
四年级小学生评语
2014/12/26 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
员工安全责任协议书
2016/03/22 职场文书
2016年主题党日活动总结
2016/04/05 职场文书