具有遗留数据库和外键(其中id = 0)的Django

时间:2019-07-23 15:55:21

标签: mysql django

编辑:这是针对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': '',
    }
}

但这似乎无济于事。我仍然遇到相同的错误。

0 个答案:

没有答案
相关问题