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学习 流程控制语句详解
Jun 01 Python
python django事务transaction源码分析详解
Mar 17 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
python扫描线填充算法详解
Feb 19 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
Python request post上传文件常见要点
Nov 20 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 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文件上传的例子及参数详解
2013/12/12 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
Yii配置文件用法详解
2014/12/04 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
2013/03/28 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
详解jquery和vue对比
2019/04/16 jQuery
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python中List.index()方法的使用教程
2015/05/20 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
《草虫的村落》教学反思
2014/02/16 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android