2017-08-18 130 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