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 28 Python
python中函数总结之装饰器闭包详解
Jun 12 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
Python解析json代码实例解析
Nov 25 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
关于Tensorflow 模型持久化详解
Feb 12 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 Python
python 详解turtle画爱心代码
Feb 15 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中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
Python open读写文件实现脚本
2008/09/06 Python
python中__call__方法示例分析
2014/10/11 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
python基础教程之五种数据类型详解
2017/01/12 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
企业军训感想
2014/02/07 职场文书
歌唱比赛主持词
2014/03/18 职场文书
工程承包协议书范本
2014/09/29 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
个人收入证明范本
2015/06/12 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电