Mysql数据库反向生成Django里面的models指令方式

 更新时间:2020年05月18日 09:11:52   作者:沧海一株莲  
这篇文章主要介绍了Mysql数据库反向生成Django里面的models指令方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

python manage.py inspectdb

python manage.py inspect > app/models.py

补充知识:Django框架MySQL数据库到models模型的映射关系

一、前言

我的数据库已经用MySQL Workbench设计好了,也插入了一些测试数据,现在开始在Django中设计models模型。本以为顺风顺水,没想到也遇到一些bug,现在记录一下踩坑填坑过程。

二、设计models模型

1. 如果数据库中表的数量比较多,可以先导出,然后查看对应表的字段,根据不同表设计不同的models类,根据同一张表的不同字段设计类属性。

用MySQL Workbench导出数据库操作:

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类属性,存在问题,如下图所示:

解决方案:把user_id 改成user即可,user = models.ForeignKey(Visitors,on_delete=models.CASCADE,primary_key=True),正确如下图:

4. time_credits_buy = models.DateTimeField('购买的时间',auto_now_add=True),time_credits_buy类属性是时间类型,数据库中credits表对应的也是时间类型。

注意,刚开始,我的数据库中把 time_credits_buy 字段设置为varchar(64)类型,而models模型中设置为时间类型,两边的类型不一致出现bug,如下图所示:

特别注意,数据库中的字段类型,一定要和models定义的类属性类型一致,否则报错,有的时候很难发现bug

三、Django自动生成models

>>> python manage.py inspectdb > app/models.py

如果数据库表已经存在,执行命令,可以自动生成Models模型,实现models与数据表的映射

以上这篇Mysql数据库反向生成Django里面的models指令方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python与Appium实现手机APP自动化测试的示例代码

    Python与Appium实现手机APP自动化测试的示例代码

    本文主要介绍了Python与Appium实现手机APP自动化测试的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • odoo字段访问控制的操作方法

    odoo字段访问控制的操作方法

    在 Odoo 中,可以通过几种方式实现字段的访问控制ÿ0c;包括通过模型安全规则、记录规则和字段属性来限制字段的访问,这篇文章主要介绍了odoo字段访问控制的相关操作,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • python解析中国天气网的天气数据

    python解析中国天气网的天气数据

    最近学习python 感觉这门脚本语言十分灵活 而且功能十分强大 尤其是他re库用于正则匹配十分强大,写了个例子解析中国天气网
    2014-03-03
  • Django web自定义通用权限控制实现方法

    Django web自定义通用权限控制实现方法

    这篇文章主要介绍了Django web自定义通用权限控制实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python神经网络使用Keras构建RNN训练

    python神经网络使用Keras构建RNN训练

    这篇文章主要为大家介绍了python神经网络使用Keras构建RNN网络训练,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2022-05-05
  • Pytorch-LSTM输入输出参数方式

    Pytorch-LSTM输入输出参数方式

    这篇文章主要介绍了Pytorch-LSTM输入输出参数方式,具有很好的参考价值,希望对大家有所帮助。
    2022-07-07
  • pandas与pyspark计算效率对比分析

    pandas与pyspark计算效率对比分析

    这篇文章主要介绍了pandas与pyspark计算效率对比,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Django Channels 实现点对点实时聊天和消息推送功能

    Django Channels 实现点对点实时聊天和消息推送功能

    这篇文章主要介绍了Django Channels 实现点对点实时聊天和消息推送功能,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • python中读取txt文件时split()函数的妙用

    python中读取txt文件时split()函数的妙用

    这篇文章主要介绍了python中读取txt文件时split()函数的妙用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python调用jar包方法实现过程解析

    Python调用jar包方法实现过程解析

    这篇文章主要介绍了Python调用jar包方法实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论