2014-02-27 106 views
1

在多數據庫環境中,如何將所有數據從數據庫移動到另一個數據庫?Django - 同步多個數據庫之間的數據

設置是這樣的:

DATABASES = { 
    'default': {}, 
    'users': { 
     'NAME': 'user_data', 
     'ENGINE': 'django.db.backends.sqlite3', 
     'USER': 'user', 
     'PASSWORD': 'superS3cret' 
    }, 
    'customers': { 
     'NAME': 'customer_data', 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'USER': 'cust', 
     'PASSWORD': '[email protected]' 
    } 
} 

有沒有簡單的解決方案/應用程序做到這一點?雖然單向遷移已經足夠了,但是由於有數十個模型和對象具有複雜的外鍵和多對多連接,遍歷模型和對象並將它們保存到另一個模型並不能解決我的問題。

loaddata也會失敗,因爲對象創建使用信號來創建其他對象,並且這會弄亂唯一的鍵。

即使使用sql轉儲也不是微不足道的,因爲後端是不同的。我已經試過了,我無法設法從我的sqlite3數據庫中進行psql轉儲,這不會搞亂外鍵。

所以我需要一個解決方案,它將數據從一個數據庫加載到另一個,但不發送信號,並使用外鍵。但我找不到任何這樣的事情。

+1

我需要這個功能太運行該腳本! – WeizhongTu

+0

使用'pg_dump'和'pg_restore'? –

+0

@CraigRinger如果兩個數據庫都使用psql後端,那就好了。 sqlite3轉儲與psql轉儲不直接兼容。另一方面,我已經解決了這個問題,看到我的答案。 – kdani

回答

1

最後我設法解決了這個問題。

我使用

manage.py syncdb --all 
manage.py migrate --fake 

加載與loaddata轉儲沒有工作,由於誠信問題,創建的表。 (例如破碎的外鍵約束)

所以我不得不改變我的表格。我刪除了損壞的約束,然後我可以運行loaddata沒有任何問題。

不過,當然我的數據庫還是因爲我放棄了一些限制而被打破。因此,我只需使用psql外殼再次更改我的表格。

pgAdmin派上用場,因爲在用戶友好的界面上顯示相關的轉儲查詢,分別爲每個不同的約束。