django 数据迁移--在已有数据表的情况下,django如何与已有的数据库表映射

问题:
mysql 数据库中存在数据库表: user

在编写django 后端接口操作时,未在models.py中创建表相关类

此时,如何在直接使django与user 建立映射关系?

 

解决方案一:

  第一步: 在models.py中创建类,并使的类中的属性名称与数据库表user中的字段名称一致。

class User(models.Model):    
    id = models.AutoField(primary_key=True)     # 与数据库表user中的字段名称一致
    username = models.CharField(max_length=32, null=False)  # 与数据库表user中的字段一致
    password = models.CharField(max_length=32, null=False)  # 与数据库表user中的字段一致
    email = models.CharField(max_length=32, null=True)     # 与数据库表user中的字段一致
    
    class Meta:
        db_table='user'    #指定表名为user

  第二步:在项目目录下执行一下命令;(在执行第二条命令时,命令行会提示django.db.utils.OperationalError: (1050, "Table 'user' already exists") 此时,可不用关注该条错误信息;数据库表user中的数据是可以正常访问的), 可完成django与数据库表映射关系的建立

python manage.py makemigrations 应用名    #  这条命令执行成功后,会生成一个0001_initial.py的文件。
python manage.py migrate      # 第一条命令执行成功后再执行该条命令  

解决方案二:

在models.py 中指定不为当前 model 创建或者删除数据库表

class User(models.Model):    
    id = models.AutoField(primary_key=True)     # 与数据库表user中的字段名称一致
    username = models.CharField(max_length=32, null=False)  # 与数据库表user中的字段一致
    password = models.CharField(max_length=32, null=False)  # 与数据库表user中的字段一致
    email = models.CharField(max_length=32, null=True)     # 与数据库表user中的字段一致
    
    class Meta:
        db_table='user'    #指定表名为user
        managed=False    # 设置为False,Django 将不会为当前 model 创建或者删除数据库表

 再执行解决方案一种的第二步, 只要应用的migrations目录下生成了0001_initial.py的文件,第二条命令的执行结果为:No migrations to apply.    此时django与数据库表的映射关系也建立成功。

posted @ 2022-07-14 17:28  火灵儿  阅读(741)  评论(0)    收藏  举报