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 相关文章推荐
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
python删除不需要的python文件方法
Apr 24 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
树莓派实现移动拍照
Jun 22 Python
python list多级排序知识点总结
Oct 23 Python
Python简单实现区域生长方式
Jan 16 Python
Python实现FLV视频拼接功能
Jan 21 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
python实现代码审查自动回复消息
Feb 01 Python
python - asyncio异步编程
Apr 06 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验证码类代码分享(已封装成类)
2011/07/17 PHP
php中的静态变量的基本用法
2014/03/20 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
微信自定义分享php代码分析
2016/11/24 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
python实现用户答题功能
2018/01/17 Python
python字典快速保存于读取的方法
2018/03/23 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python 内置函数汇总详解
2019/09/16 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
三孔导游词
2015/02/05 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript