2017-08-18 103 views
0

有没有办法从django迁移中排除数据库?从django迁移中排除数据库

我有一个sphinxsearch数据库在我的Django项目:

DATABASES['sphinxsearch'] = { 
    'ENGINE': 'sphinxsearch.backend.sphinx', 
    ... 
} 

当我尝试运行manage.py makemigrations命令,Django的尝试对其运行 SHOW FULL TABLES查询

这导致错误,因为这是sphinxql的错误语法

File "C:\Anaconda\lib\site-packages\django\db\backends\mysql\introspection.py", line 56, in get_table_list 
    cursor.execute("SHOW FULL TABLES") 
... 
django.db.utils.ProgrammingError: (1064, "sphinxql: syntax error, unexpected IDENT, expecting VARIABLES near 'FULL TABLES'") 
+1

尝试创建数据库路由器并返回''False' for ['allow_migrate'](https://docs.djangoproject.com/en/1.11/topics/db/multi-db/#allow_migrate) – Alasdair

回答

1

此规则的一个例外是makemigrati命令。

它验证数据库中的迁移历史记录,以便在创建新迁移之前捕获现有迁移文件(可能由编辑它们导致)的问题。

默认情况下,它只检查默认数据库,但它会查询路由器的allow_migrate()方法(如果有的话)。

makemigrations总是创建模型的变化迁移,但迁移运行的数据库时,如果allow_migrate()回报False,任何迁移操作的模型名称将是默默地跳过。

对于已经具有迁移的模型,更改allow_migrate()的行为可能会导致外键损坏,额外的表格或缺少的表格。当makemigrations验证迁移历史记录时,它将跳过不允许应用程序的数据库migrate