【发布时间】:2013-09-25 14:14:33
【问题描述】:
我正在将 postgres unaccent 功能用于 django 项目。
这使我的应用程序数据库具有特定性,并且我希望能够使用其他一些数据库(不带扩展名的 postgres 或其他数据库)。在这种情况下,我当然不使用unaccent
我想为用户提供一些透明的东西。我想象我的代码应该是这样的:
def get_objects(text):
try:
qs = MyModel.objects.extra(
where=[u"UPPER(unaccent("name")) LIKE UPPER(unaccent(%s))"],
params = [u"%{0}%".format(text)]
)
return list(qs)
except DatabaseError, msg:
qs = MyModel.objects.filter(name__icontains=text)
return list(qs)
很遗憾,如果unaccent 未安装在数据库上,则会引发 DatabaseError 但第二次查询失败并出现以下错误:
DatabaseError: current transaction is aborted, commands ignored until end of transaction block
我尝试添加事务支持并回滚它,但没有成功。
无论unaccent 是否可用,管理此错误并使代码正常工作的最佳方法是什么。
【问题讨论】:
-
您有语法错误。
try块中的)应该在return list(qs)之前。现在,return qs作为 SQL 语句的一部分被发送到extra(),但它失败了。 -
谢谢,我认为它已修复。这不是真正的代码......只是试图解释我想要做什么
标签: python django postgresql database-agnostic