在搭建django+mysql后台的时候,可能会遇到一个问题:
如果mysql数据库中已经存在一张数据表的话,并且希望模型与这张表建立映射关系,该怎么办?
假设数据库中已经有表 table1.如果写好模型,在setting中配好数据库后,直接运行,会报错:
"Table '应用名.模型名' doesn't exist"。
这是因为模型和数据库尚未建立映射关系。因此应用程序无法找到这张表。
解决办法:
方法一:
1.执行python manage.py makemigation 和 python manage.py migrate.
执行的时候会报错,提示数据库中已经有表。可以先忽略报错。然后,去数据库查看的时候,会发现数据库同时新建了table2.
2.删除table2:drop table table2.
3.将table1重命名为table2:alter table table1 rename to table2。此时,模型与数据库已经建立起关系映射。
其实,这种方法的思路就是:将数据库的那张表的表名改成迁移后新生成的数据表的表名。
4.重新执行迁移,迁移会顺利执行,不会报错。如果不再迁移,django-session这些表无法被创建。admin后台也无法进入等。
方法二:
1.在model.py下面指定表名称:
class XXX:
id = models.AutoField(primary_key=True)
...
class Meta:
db_table = "table1"
2.运行应用程序,程序可以正常执行。
3.但是如果做迁移,会报错。如果希望admin后台可以正常使用,可以单独迁移生成django-session表。python manage.py migrate sessions。但是这样做可能会有其他一些潜在的问题。