【Django基础学习】python manage.py inspectdb相关的一些问题和解决方案

Django 之 inspectdb

inspectdb简单介绍

  1. 具体用法,在Django项目下
python manage.py inspecdb > [your app name]\models.py
  1. 作用
    众所周知,Django较为适合原生开发,即通过该框架搭建一个全新的项目,通过在修改models.py来创建新的数据库表。但是往往有时候,我们需要利用到之前的已经设计好的数据库,数据库中提供了设计好的多种表单。那么这时如果我们再通过models.py再来设计就会浪费很多的时间。所幸Django为我们提供了inspecdb的方法。他的作用即使根据已经存在对的mysql数据库表来反向映射结构到models.py中.

inspectdb使用步骤

  1. 通过配置settings文件以及__init__.py来连接到本地的mysql数据库。(之前的博客有谈到方法)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'second_shop',
        'USER':'root',
        'PASSWORD':'123',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }
}
  1. 在terminal中执行语句
python manage.py inspectdb > [your app name]\models.py
  1. 查看models.py代码
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
#
# Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
# into your database.
from __future__ import unicode_literals

from django.db import models


class Good(models.Model):
    good_name = models.CharField(max_length=255, blank=True, null=True)
    good_price = models.DecimalField(max_digits=10, decimal_places=0, blank=True, null=True)
    good_days = models.IntegerField(max_length=10, blank=True)
    good_id = models.CharField(max_length=18, blank=True)

    class Meta:
        managed = False
        # False表示在迁移时候不新建此表,所以这里应该改为TRUE
        db_table = 'good'
  1. 新建一个mysql数据库,并且重新配置settings文件连接到新的数据库。
  2. 执行迁移,将之前获得的表结构迁移到新数据库中。
python manage.py makemigrations
python manage.py migrate
  1. 查看新建的数据库,发现导出成功。
    已经成功导出
  2. 通过给models.py新加字段查看能否成功在mysql中表示。
class Good(models.Model):
    good_name = models.CharField(max_length=255, blank=True, null=True)
    good_price = models.DecimalField(max_digits=10, decimal_places=0, blank=True, null=True)
    good_days = models.IntegerField(max_length=10, blank=True)
    good_id = models.CharField(max_length=18, blank=True)
    good_place = models.CharField(max_length=50, blank=True)  # 新增列

    class Meta:
        managed = False
        db_table = 'good'

python manage.py makemigrations
python manage.py migrate

迁移成功
8. 查看Navicat中数据库。
在这里插入图片描述
9. 只有如果原来数据库中有原始数据,则可以通过mysql方法直接导入。

问题汇总

问题一: 在执行makemigrationbs提示no changed错误,或者是migrate提示no migrations。

解决: 删除数据库中表django_migrations中有关自己app的条目,并且删除工程目录下,app目录下migration文件夹中除了__init__.py之外的所有文件。再重新执行迁移。

问题二: 为什么要在inspectdb之后更换数据库再进行迁移,直接使用原来的数据库不可以吗?

回答: 因为作者发现inspecdb之后,自定义修改生成的models.py文件(例如新增字段之类),执行迁移之后并不会改变原数据库中的表结构。

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: python manage.py inspectdbDjango命令行工具中的一个命令,用于自动生成Django模型类的代码,这些模型类对应于已存在的数据库表。该命令可以帮助开发人员快速创建Django应用程序,并在应用程序中使用现有的数据库表。 ### 回答2: 在Django中,您可以使用命令python manage.py inspectdb来自动生成与您数据库中表相对应的模型。 这个命令的作用是,通过连接到数据库并分析其中的表,自动生成与该数据库中表相对应的Django模型。这个命令会把所有的表都搜集起来,然后根据其定义,生成相应的models.py文件,不过需要排除冗余表(不需要的表)以保证项目的干净整洁。 这个命令主要用于对于已有的数据库,利用命令生成的模型,将该数据库的数据映射到Django的模型中,即:在Django中使用基于对象模型访问已有的数据库。 若采用django的model定义需要开发人员手动去建立每个表中每个列的属性,这可是一个非常繁琐的过程,而且还需要谨慎小心地检查每个模型的属性设置是否与数据库的表和列一一对应。而使用inspectdb命令,可以省去手工创建model类及列属性的繁琐过程,从而使得开发人员可以更快速地开展工作,提高开发效率。 总而言之,通过python manage.py inspectdb,您可以快速而准确地从现有数据库生成相关Django模型,节省时间和减少错误。 ### 回答3: 在Django中,manage.py inspectdb是一种命令行工具,用于根据已有的数据库表自动生成模型类。这对于从旧的数据库迁移到Django时,或使用现有的数据库时非常有用。 该命令会根据数据库表自动生成基本的模型类,可以让Django应用程序访问原始表数据。自动生成的模型类通常存储在models.py文件中。这个文件可以在Django的应用程序中手动编辑和修改以满足需求。 当运行inspectdb命令时,它会连接到数据库,并检查其中的所有表和字段信息。它还会检查每个表所需的表之间的关系,并为每个表生成模型类。 它生成的模型类的质量取决于数据库表结构的质量。因此,如果函数和存储过程等特殊类型的SQL不包含在Django的模型中,则需要手动编辑生成的模型。 要使用Python manage.py inspectdb命令生成基本模型,必须在setting.py文件中设置数据库信息。在这个文件中,必须设置数据库引擎类型和连接到其他数据库的所有必要信息。确保在数据库中设置一个表或多个表之后运行此命令。 总之,Python manage.py inspectdb是一个非常有用的命令行工具,可以根据现有数据库中表的结构信息快速生成基本模型。这对于Django应用程序中需要使用现有数据库时非常有用。虽然手动编辑需要,但inspectdb工具可以极大地减少开发人员的工作量,从而提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值