0
讓我們假設我有一個通過django中的繼承實現的父表和子表。Django在單個查詢中選擇繼承的模型
models.py
class A(models.Model)
a = CharField()
class B(A):
b = CharField()
現在我想從表B
選擇列b
我執行:
B.objects.only('b').get(id=4)
但這個語句查詢數據庫2次:
SELECT `b`.`a_ptr_id`, `b`.`b` FROM `b` WHERE `b`.`a_ptr_id` = 4; args=(4,)
SELECT `a`.`a`, `b`.`a_id` FROM `b` INNER JOIN `a` ON (`b`.`a_ptr_id` = `b`.`id`) WHERE `b`.`a_ptr_id` = 4; args=(4,)
我如何創建使用django模型像select b from b where a_ptr_id = ?
一樣提供SINGLE查詢?
我想單次查詢數據庫!
該語句的數據庫只提供線路的2個SQL查詢的一個,你應該得到第二個,當你做'B.objects.only(「A」 ).get(id = 4)',也許你打開數據庫連接並打印所有的SQL查詢? – HassenPy
我剛剛用上面描述的完全相同的模型創建了新的應用程序。當我執行'B.objects.only('b')。get(id = 1)'時,它運行第一個查詢。但只要我訪問字段'b'(例如'print(b.b)'),它就會運行第二個查詢。 – deathangel908
下面是證明:下載'https:// static.pychat.org/ mysite2.zip',解包,在'settings.py'中指定你的數據庫源文件(不能讓日誌工作到sqlight),執行'./manage。 python makemigrations mysite2','./manage.py migrate','./manage.py runserver 8888',打開'localhost:8888/ad' url並檢查數據庫中的日誌。 – deathangel908