2014-01-18 18 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重复使用请求中的线程。