我正在优化我的代码,这使得太多的查询开始。你知道吗
我现在几乎到了最低限度,并开始遇到以下问题:
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)
第二个查询总是我想要的,我不知道第一个查询的目的是什么。你知道吗
我相信BEGIN查询是sqlite后端处理sqlite怪癖的一种变通方法。我认为您将看到一个开始为您在事务之外所做的每一次写入。你知道吗
如果您想深入研究代码,请启动here。你知道吗
因此,对于这些查询您无能为力,但我不担心,我怀疑它们是否会对性能产生显著影响。如果您真的担心数据库写入的性能,那么您可以尝试使用不同的数据库后端。你知道吗
相关问题 更多 >
编程相关推荐