2014-01-18 56 views
0

如果您使用Django,您可以簡單地創建一個模型的實例,填充數據並調用save()並將其保存到數據庫。您不必傳入「連接」參數或做任何特殊的事情。此外,你的觀點只是簡單的可調用,所以似乎沒有隱藏的魔法。即這工作:Django如何通過它的數據庫連接

from django.http import HttpResponse 
from models import MyModel 

def a_simple_view(request): 

    instance = MyModel(some_field="Foobar") 
    instance.save() 

    return HttpResponse(<html><body>Jep, just saved</body></html>) 

所以問題是:我剛剛創建的模型實例如何獲得數據庫連接,以便自己保存?並作爲後續行動:這是一個明智的做法嗎?

+1

我相信,如果你閱讀源代碼,你的問題應該回答:) https://github.com/django/django/tree/master/django/db/models – petkostas

回答

0

很難描述django如何做到這一點,但您可以通過查看django的源代碼,特別是在django.db模塊中瞭解更多。

有一個數據庫抽象層,以便Django可以處理許多數據庫,如sqlite,mysql和postgresql。有連接池,以便Django在後續查詢中重用連接。所有這些東西都被一個Django模型使用,當一個db查詢被運行時。最後它並不簡單,你應該檢查源代碼以找到詳細的答案。

1

如何我剛創建的模型實例獲取數據庫連接 所以自己救自己?

本質上,每個模型都有一個知道數據庫連接的Manager。事實上,它有點複雜,因爲管理者委派連接創建和管理(到數據庫路由器和連接管理器)。

這是一個明智的方法嗎?

那麼,這是一個無法回答的問題,如果沒有背景,真的。在Django模型的背景下,這是一種明智的方法,因爲作爲開發人員,您不必關心連接管理問題。

如果你問的Django是否需要一個明智的做法,以連接管理,和你擔心它可能不是,這裏是Django的documentation有什麼看法:

的Django打開的連接數據庫時,它首先進行數據庫查詢 。它使這個連接保持打開狀態,並在後續請求中重複使用它 。 Django在連接超過由CONN_MAX_AGE定義的最大時限或連續時間不可用時關閉連接。

和:

因爲每個線程都維護自己的連接,數據庫必須 至少支持儘可能多的併發連接,你有工人 線程。

所以現在的問題是:什麼時候創建多少個線程?這取決於使用的服務器。例如。開發服務器爲每個請求啓動一個新的線程,而gunicorn重複使用請求中的線程。