Django新建数据模型、已有数据库建立模型方法
发表于 : 周一 1月 16, 2023 10:03 pm
这里例举了2种情况,第1种是新建数据模型(数据库中不存在同名表),第2种是数据库已经有表格了,需要根据已有表格自动生成数据模型。这里假设项目已经连接好了数据库,可进行下一步操作
一、新建数据模型。在models.py文件中根据Django规范建数据模型,如下举例代码
模型文件编辑完后,在项目manage.py所在目录命令行中执行
第一条命令会根据models.py文件在项目的"App\migrations"目录中生成生成数据库迁移文件,第二条命令会根据上条命令生成的代码,在数据库中生成(或叫数据迁移)User、UserFields两个数据表,同时还会自动生成Django自已需要的一些辅助表
二、根据已有表格自动生成数据模型。
在项目manage.py所在目录命令行中执行下面命令
该命令会根据连接的数据库中已有的数据表格,自动在models.py文件中生成模型代码,注意当表名为中文时,生成的代码class类名为空,需要手动添加中文名(与中文表名相同)。同时还需要添加“managed = False”语句,该语句的作用是在进行数据库迁移时,包含这个语句的模型不需要迁移,也就是告诉它不需要在数据库中对该表作修改。举例代码如下 :
一、新建数据模型。在models.py文件中根据Django规范建数据模型,如下举例代码
Code: [全选] [Expand/Collapse]
- class Users(models.Model):
- employeeid = models.CharField(unique=True, max_length=10, verbose_name='工号')
- name = models.CharField(max_length=20, verbose_name='姓名')
- password = models.CharField(max_length=20, verbose_name='密码')
- admin_choices = (
- (1, "是"),
- (0, "否"),
- )
- admin = models.BooleanField('管理员', default=False, choices=admin_choices)
- create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
- update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
- login_time = models.DateTimeField(auto_now=True, verbose_name='登录时间')
- # 输出对象时,设置显示出的内容
- def __str__(self):
- return self.name
- class UserFields(models.Model):
- user = models.ForeignKey(Users, related_name='user_fields', on_delete=models.CASCADE, verbose_name='用户名')
- table_name = models.CharField('表名', max_length=20)
- fields_opt = models.JSONField('字段设置', )
Code: [全选] [Expand/Collapse]
- python manage.py makemigrations
- python manage.py migrate
第一条命令会根据models.py文件在项目的"App\migrations"目录中生成生成数据库迁移文件,第二条命令会根据上条命令生成的代码,在数据库中生成(或叫数据迁移)User、UserFields两个数据表,同时还会自动生成Django自已需要的一些辅助表
二、根据已有表格自动生成数据模型。
在项目manage.py所在目录命令行中执行下面命令
Code: [全选] [Expand/Collapse]
- python manage.py inspectdb
Code: [全选] [Expand/Collapse]
- class 专项类别(models.Model):
- 序号 = models.AutoField(primary_key=True)
- 类别 = models.CharField(max_length=30)
- class Meta:
- managed = False
- db_table = '专项类别'
- class 作业区编码(models.Model):
- 序号 = models.AutoField(primary_key=True)
- 编码 = models.CharField(max_length=10, blank=True, null=True)
- 名称 = models.CharField(max_length=45, blank=True, null=True)
- def __str__(self):
- return self.名称
- class Meta:
- managed = False
- db_table = '作业区编码'