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与数据库表的映射关系也建立成功。

浙公网安备 33010602011771号