2

我正在尝试将 HTSQL 用于我的 Django 项目之一。为此,我按照此处给出的程序来提供 HTSQL/Django 要求。然后我克隆了 HTSQL 存储库,以便从HERE尝试其中的示例/演示。演示示例中使用的默认数据库是 sqlite3。我已经在 Django v 1.4 和 Django v 1.3.1 上尝试过这个演示(必须在 Django v 1.3.1 的 settings.py 中进行一些调整)。按照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中查看整个错误跟踪

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

4

1 回答 1

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)

很抱歉,文档对此并不清楚。我们可能会在未来的版本中对其进行更改。

于 2012-08-22T13:47:04.643 回答