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之禅》中对于Python编程过程中的一些建议
Apr 03 Python
Python实现身份证号码解析
Sep 01 Python
python遍历序列enumerate函数浅析
Oct 17 Python
使用Python从零开始撸一个区块链
Mar 14 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
Python实现密码薄文件读写操作
Dec 16 Python
使用Pytorch来拟合函数方式
Jan 14 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
Apr 10 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
Jun 03 Python
python 实现的IP 存活扫描脚本
Dec 10 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 session 存储方式的详细介绍
2013/06/25 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
使用JQuery进行跨域请求
2010/01/25 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
跟老齐学Python之Python安装
2014/09/12 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
中学生个人自我评价
2014/02/06 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
房地产开发项目建议书
2014/05/16 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书