2010-09-26 67 views
0

我使用Django和MySQL來爲一個網站提供服務。我的本地主機上有我自己的MySQL服務器。現在我有一個第三方MySQL數據庫,我需要使用它來讀寫遠程主機上的數據庫。我在我的settings.py文件中設置了新的數據庫信息,但是當我嘗試訪問遠程數據庫時發生問題。由於新的數據庫不是由我創建的,因此我在models.py文件中沒有相應的類。從中讀取Model.objects.using('remote_db_name')。get(pk = 0)的常規方式不起作用,因爲它會引發NameError。在Django中處理本地和遠程數據庫

我想知道在Django中處理本地和遠程數據庫的正確方法是什麼,特別是當遠程數據庫只提供SELECT和INSERT權限時。我在網上找到的所有教程都是關於在同一個Django站點中定義的多個數據庫,因此models.py文件具有所需的所有數據。

感謝您提前提供任何幫助!

回答

1

你有兩個選擇:

  1. 使用Django的legacy database support來自動生成模型,現有的數據庫。

  2. 跳過Django ORM,並使用原始SQL對數據庫執行SQL語句。

+0

感謝您的回覆。但是如果我選擇跳過Django ORM並使用原始SQL,我仍然需要我的models.py文件中的遠程數據庫的類別嗎?我需要執行Model.objects.raw(...),它仍然需要該類。或者你的意思是在Django之外使用原始SQL?如果是這樣的話,最好的辦法是什麼?來自django.db的 – Jd007 2010-09-26 16:01:10

+0

import connection; c = connection.cursor(); c.execute(SQL) – 2010-09-26 16:08:40

+0

即使遠程數據庫沒有使用Django,這是否也能正常工作?特別是,我試圖連接到的數據庫使用PHP。謝謝。 – Jd007 2010-09-26 17:09:58

1

我在Django的遺留支持方面有很多困難時刻--DJango的設計並非嚴格支持遺留數據庫。當然有一些工具/方法(比如Ned上面告訴的),但我寧願推薦SQLAlchemy作爲替代方案。它速度非常快,它被設計爲支持任何類型的數據庫,無論它們是通過sqlalchemy創建的,也不是傳統數據庫。

當然,如果您需要其他所有Django的元素,請參閱Ned的解決方案,但請記住,您必須在此舊版數據庫中創建django核心表,因此您需要具有CREATE權限。