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登录Gmail并发送Gmail邮件的教程
Apr 17 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
python抽取指定url页面的title方法
May 11 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
python脚本第一行如何写
Aug 30 Python
Python urllib request模块发送请求实现过程解析
Dec 10 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
python+playwright微软自动化工具的使用
Feb 02 Python
python opencv通过按键采集图片源码
May 20 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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
谈一谈收音机的高放电路
2021/03/02 无线电
浅谈PHP语法(1)
2006/10/09 PHP
php面向对象的方法重载两种版本比较
2008/09/08 PHP
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
PHP7新增函数
2021/03/09 PHP
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python实现控制COM口的示例
2019/07/03 Python
python 多进程队列数据处理详解
2019/12/23 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
2014年党风廉政工作总结
2014/12/03 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
2015年社区工作总结
2015/04/08 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers