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 相关文章推荐
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
Python实现文件复制删除
Apr 19 Python
Python numpy实现二维数组和一维数组拼接的方法
Jun 05 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
PYQT5实现控制台显示功能的方法
Jun 25 Python
对django的User模型和四种扩展/重写方法小结
Aug 17 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
Python运行异常管理解决方案
Mar 09 Python
django rest framework 过滤时间操作
Jul 12 Python
python 简单的调用有道翻译
Nov 25 Python
python使用smtplib模块发送邮件
Dec 17 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 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获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
js运动应用实例解析
2015/12/28 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
python排序方法实例分析
2015/04/30 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
你应该知道的python列表去重方法
2017/01/17 Python
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
python读取图片任意范围区域
2019/01/23 Python
python的常见矩阵运算(小结)
2019/08/07 Python
用python对excel查重
2020/12/07 Python
python实现KNN近邻算法
2020/12/30 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
优秀小学生家长评语
2014/01/30 职场文书
房地产项目策划书
2014/02/05 职场文书
《匆匆》教学反思
2014/02/22 职场文书
公司总经理任命书
2014/06/05 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
运动会通讯稿50字
2015/07/20 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python