编辑:这是针对Django 2.1
我正在处理从基于PHP的MySQL数据库迁移到Django的数据。在此PHP数据库中,他们使用了id = 0的外键。因此,当我尝试插入引用外键0的记录时,自然会得到以下信息:
“数据库后端不接受0作为AutoField的值。”
足够公平。
似乎这样做是为了保护人们免受MySQL使用0自动生成主键的影响:
https://code.djangoproject.com/ticket/17713
但是,似乎有一种方法可以编写“自定义后端”来解决此问题:
https://www.mail-archive.com/django-users@googlegroups.com/msg187956.html
对于似乎具有在MySQL会话中设置以下内容的基于会话的解决方案的事情,这似乎不是最佳选择:
SET SESSION SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
除了切换数据库或其他黑客手段来使这项工作有效之外,还有更好的选择让Django和MySQL与id=0
一起玩吗?
编辑:
我尝试将以下内容添加到我的项目中:
# foo_project/base.py
from django.db.backends.mysql.base import DatabaseWrapper as BaseDatabaseWrapper
from django.db.backends.mysql.features import DatabaseFeatures as BaseDatabaseFeatures
class DatabaseFeatures(BaseDatabaseFeatures):
allows_auto_pk_0 = True
class DatabaseWrapper(BaseDatabaseWrapper):
features_class = DatabaseFeatures
和settings.py:
# settings.py
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.mysql',
'ENGINE': 'foo_project',
'NAME': 'foo',
'USER': 'foouser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
但这似乎无济于事。我仍然遇到相同的错误。