在 Django 1.8 发行说明中,它提到 Django Fields 不再使用SubfieldBase
,并且已将to_python
调用赋值替换为from_db_value
.
文档还指出,from_db_value
每当从数据库加载数据时都会调用它。
我的问题是,from_db_value
如果我直接读/写数据库(即使用 cursor.execute()),是否会调用?我最初的尝试和直觉说不,但我只是想确定一下。
在 Django 1.8 发行说明中,它提到 Django Fields 不再使用SubfieldBase
,并且已将to_python
调用赋值替换为from_db_value
.
文档还指出,from_db_value
每当从数据库加载数据时都会调用它。
我的问题是,from_db_value
如果我直接读/写数据库(即使用 cursor.execute()),是否会调用?我最初的尝试和直觉说不,但我只是想确定一下。
有时甚至
Manager.raw()
还不够:您可能需要执行不完全映射到模型的查询,或者直接执行 UPDATE、INSERT 或 DELETE 查询。在这些情况下,您始终可以直接访问数据库,完全围绕模型层进行路由。
上面指出 usingcursor.execute()
将完全绕过模型逻辑,返回原始行结果。
如果您想执行原始查询并返回模型对象,请参阅有关执行原始查询的 Django 文档。
raw() 管理器方法可用于执行返回模型实例的原始 SQL 查询:
for p in Person.objects.raw('SELECT * FROM myapp_person'):
print(p)
>>> John Smith
>>> Jane Jones