Django HTSQL TransactionManagementError与sqlite以及PostgreSQL后端

时间:2012-08-22 08:45:38

标签: database django transactions htsql

我正在尝试将HTSQL用于我的一个Django项目。为此,我按照HERE给出的程序来提供HTSQL / Django要求。然后我克隆了HTSQL存储库,用于在HERE中尝试示例/ demo。演示示例中使用的默认数据库是sqlite3。 我已经在Django v 1.4和Django v 1.3.1上尝试了这个演示(必须在settings.py中对Django v 1.3.1进行一些调整)。按照HTSQL Django-gateway Blog中的说明,我在django项目shell中编写了以下代码:

>>> from htsql_django import produce
>>> query = "/polls_poll{question, total:=sum(polls_choice.votes)}"
>>> for row in produce(query):
>>>    print "%s: %s" % (row.question, row.total)

它抛出以下错误:

TransactionManagementError: This code isn't under transaction management

可以在pastebin

查看整个错误跟踪

我也在我自己的新项目上尝试了这个但同样的错误。

1 个答案:

答案 0 :(得分:4)

当你从Django shell使用HTSQL时,你必须明确地打开一个事务:

>>> from django.db import transaction
>>> from htsql_django import produce
>>> with transaction.commit_on_success():
...     query = "/polls_poll{question, total:=sum(polls_choice.votes)}"
...     for row in produce(query):
...        print "%s: %s" % (row.question, row.total)

对不起,文档不清楚。我们可能会在将来的版本中对其进行更改。