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中的私有属性
Aug 21 Python
Python基于PycURL自动处理cookie的方法
Jul 25 Python
python监控文件或目录变化
Jun 07 Python
python安装Scrapy图文教程
Aug 14 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
Python任务调度利器之APScheduler详解
Apr 02 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
python-jwt用户认证食用教学的实现方法
Jan 19 Python
Python使用DFA算法过滤内容敏感词
Apr 22 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使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
用JS实现选项卡
2020/03/23 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
python中argparse模块用法实例详解
2015/06/03 Python
详解python中asyncio模块
2018/03/03 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
精通CAD能手自荐书
2014/01/31 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
Python实现机器学习算法的分类
2021/06/03 Python
Feign调用传输文件异常的解决
2021/06/24 Java/Android
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
Python加密技术之RSA加密解密的实现
2022/04/08 Python
python manim实现排序算法动画示例
2022/08/14 Python