2015-06-17 89 views
0

我优化我的代码,这是在开始做太多的疑问奇怪的Django的'BEGIN” - PARAMS =()”查询

我得到几乎最低限度,现在,已经开始。遇到下列未来:

QUERY = 'BEGIN' - PARAMS =() 

这似乎是用来几乎每一次,实际上加倍的查询号码的 - 但我不认为它实际上是做任何事情(除了开放的连接DB和浪费时间和CPU)。

谁能告诉我它是什么,为什么这是必要的,如果不是,我该如何删除它?

我在查看我的查询使用django.db.connection.queries

Django - 1.8 Python - 3.4 以sqlite作为数据库。

编辑:上下文

提供的例子是有点古怪,因为它几乎每一个动作我拿这需要查询导致此查询弹出(旁边我想查询)。

但这里有几个例子:

创建其中有现在一个缺省时间戳的对象:

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

没有任何上下文,几乎不可能对此陈述发表一些看法。 –

+0

@KlausD。添加了一些示例以帮助上下文,让我知道如果您需要更多。 – Scironic

回答

1

我相信BEGIN查询是在sqlite后端处理sqlite的怪癖。我想你会看到一个BEGIN,用于你在交易之外完成的每一个写作。

如果您想进一步深入代码,请启动here

因此,您无法对查询做任何事情,但我不担心,我怀疑它们对性能有任何显着影响。如果你真的担心db的写入性能,那么你可以尝试一个不同的数据库后端。

+0

谢谢,看着你的代码看起来你是对的。我很快可能会迁移到新的后端。 – Scironic