Django数据库表反向生成实例解析
本文详细解析Django中数据库表反向生成Model代码的方法。通过对比正向生成与反向生成的区别,演示如何配置Django工程、App及MySQL数据库,并执行manage.py命令从现有数据库表自动生成对应的Python Model代码,帮助开发者高效管理数据库结构。
本文将探讨如何在Django框架中实现从MySQL数据库反向生成Model代码,具体操作步骤如下。
在介绍反向生成之前,我们先简要说明正向生成代码的流程。
正向生成是指先编写model.py文件,随后利用Django内置的工具在MySQL等数据库中创建与Model定义相匹配的数据表。
反向生成则是指先在数据库中执行create table语句创建数据表,再通过Django内置工具自动生成对应的Model代码。
1、准备工作
创建Django工程以及对应的App。
创建一个名为helloworld的Django工程。
django-admin.py startproject helloworld
创建一个名为test的App。
python manage.py startapp hello
配置数据库连接信息。
在settings.py文件的INSTALLED_APPS列表中添加App名称。
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'hello', ]
在settings.py文件中配置数据库连接参数。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'big_data',
'USER': 'root',
'PASSWORD': '1234',
'HOST': '10.93.84.53',
'PORT': '3306',
}
}
2、正向生成
在hello App目录下创建model.py文件。
from django.db import models class AlarmGroup(models.Model): group_name = models.CharField(primary_key=True, max_length=250) group_des = models.TextField(blank=True, null=True) members = models.TextField(blank=True, null=True) timestamp = models.DateTimeField()
执行相关命令以完成正向生成过程。
python manage.py makemigrations python manage.py migrate
登录配置的数据库,检查确认数据表已成功创建。
3、反向生成
首先在数据库中手动创建数据表。
CREATE TABLE `alarm_group` ( `group_name` varchar(250) NOT NULL, `group_des` blob, `members` blob, `timestamp` datetime NOT NULL, `on_duty` blob, `leader` blob, PRIMARY KEY (`group_name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8
接着执行特定命令,生成对应的model.py代码。
python manage.py inspectdb
生成的model.py代码如下所示。
class AlarmGroup(models.Model):
group_name = models.CharField(primary_key=True, max_length=250)
group_des = models.TextField(blank=True, null=True)
members = models.TextField(blank=True, null=True)
timestamp = models.DateTimeField()
class Meta:
managed = False
db_table = 'alarm_group'
总结
以上内容即为Django数据库表反向生成Model代码的完整解析,希望能为读者提供帮助。感兴趣的朋友可继续查阅本站其他技术专题,如有疏漏欢迎留言指正,感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









