我正在优化我的代码,这在开始时提出了太多的查询。
我现在几乎达到了最低限度,并且已经开始实现以下目标:
QUERY = 'BEGIN' - PARAMS = ()
这似乎几乎每次都使用,实际上查询次数增加了一倍 - 但我认为它实际上并没有做任何事情(除了打开与DB的连接并浪费时间和CPU)。 / p>
任何人都可以告诉我它是什么,为什么它是必要的,如果不是,我怎么能删除它?
我正在使用django.db.connection.queries
查看我的查询。
Django - 1.8 Python - 3.4 用sqlite作为DB。
编辑:
为上下文提供示例有点奇怪,因为我几乎所有需要查询的操作都会导致查询弹出(与我想要的查询一起)。
但这里有几个例子:
创建一个默认时间戳为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)
第二个查询总是我想要的,我不知道第一个QUERY = 'BEGIN' - PARAMS = ()
是什么。
答案 0 :(得分:1)
我相信BEGIN查询是在sqlite后端解决sqlite的怪癖。我想你会在交易之外的每一次写作中看到一个BEGIN。
如果您想深入了解代码,请启动here。
因此,您无法对查询进行任何操作,但我不担心,我怀疑它们会对性能产生任何明显的影响。如果您真的担心写入的db性能,那么您可以尝试使用不同的数据库后端。