奇怪的Django''BEGIN'参数=()'查询

2024-04-19 20:26:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在优化我的代码,这使得太多的查询开始。你知道吗

我现在几乎到了最低限度,并开始遇到以下问题:

QUERY = 'BEGIN' - PARAMS = ()

这看起来几乎每次都在使用,而且几乎使所做查询的数量增加了一倍——但我不认为它实际上在做任何事情(除了打开到DB的连接和浪费时间和CPU)。你知道吗

谁能告诉我它是什么,为什么它是必要的,如果它不是,我如何才能删除它?你知道吗

我正在使用django.db.connection.queries查看我的查询。你知道吗

Django-1.8米 Python-3.4版 以sqlite作为数据库。你知道吗

编辑:

为上下文提供示例有点奇怪,因为几乎我采取的每一个需要查询的操作都会导致这个查询弹出(与我想要的查询一起)。你知道吗

但这里有几个例子:

创建一个默认时间戳为now的对象:

session = Session()
session.save()

提供以下查询:

QUERY = 'BEGIN' - PARAMS = ()
QUERY = 'INSERT INTO "tracker_session" ("name", "session_date", "number_of_courts", "finished", "session_tracker") VALUES (%s, %s, %s, %s, %s)' - PARAMS = ('', '2015-06-17', 4, False, '')

类似地,更新一组对象以更改特定属性:

(这里的self只是一个具有ManyToMany属性players的对象)

self.players.all().update(available=True)

收益率:

QUERY = 'BEGIN' - PARAMS = ()
QUERY = 'UPDATE "tracker_person" SET "available" = %s WHERE "tracker_person"."id" IN (SELECT U0."id" AS Col1 FROM "tracker_person" U0 INNER JOIN "tracker_session_players" U1 ON ( U0."id" = U1."person_id" ) WHERE U1."session_id" = %s)' - PARAMS = (True, 19)

第二个查询总是我想要的,我不知道第一个查询的目的是什么。你知道吗


Tags: 对象selfidtrue属性sessionparamsquery
1条回答
网友
1楼 · 发布于 2024-04-19 20:26:41

我相信BEGIN查询是sqlite后端处理sqlite怪癖的一种变通方法。我认为您将看到一个开始为您在事务之外所做的每一次写入。你知道吗

如果您想深入研究代码,请启动here。你知道吗

因此,对于这些查询您无能为力,但我不担心,我怀疑它们是否会对性能产生显著影响。如果您真的担心数据库写入的性能,那么您可以尝试使用不同的数据库后端。你知道吗

相关问题 更多 >