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 10 Python
python Django批量导入不重复数据
Mar 25 Python
Flask框架配置与调试操作示例
Jul 23 Python
python os.path模块常用方法实例详解
Sep 16 Python
对Python中内置异常层次结构详解
Oct 18 Python
对python函数签名的方法详解
Jan 22 Python
python二进制文件的转译详解
Jul 03 Python
python实现按首字母分类查找功能
Oct 31 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
python logging 日志的级别调整方式
Feb 21 Python
python时间time模块处理大全
Oct 25 Python
python 第三方库paramiko的常用方式
Feb 20 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 过滤危险html代码
2009/06/29 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
composer.lock文件的作用
2016/02/03 PHP
jquery实用代码片段集合
2010/08/12 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
python3.0 字典key排序
2008/12/24 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
爽歪歪广告词
2014/03/20 职场文书
小学数学课后反思
2014/04/23 职场文书
文明市民先进事迹
2014/05/15 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
刑事代理授权委托书
2014/09/17 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
信用卡收入证明范本
2015/06/12 职场文书
2019财务转正述职报告
2019/06/27 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript