我正在将 postgresunaccent
功能用于 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
可用与否的最佳方法是什么。