1

我有一个由 UUID 字段索引的表,使用 postgres 的uuid-ossp扩展名,所有内容都在python应用程序上运行。每次我过滤 UUID 字段时,我都必须显式转换 uuid 字段:

htsql = HTSQL('pgsql:///my_database')
htsql.produce("/product.filter(string(id) = '00002094-b1c3-11e3-92b8-6bb3666a756f')")

如果我不投id我有以下错误:

htsql.produce("/product.filter(id = '00002094-b1c3-11e3-92b8-6bb3666a756f')")

Cannot coerce values of types (opaque, untyped) to a common type
While translating:
    /product.filter(id = '00002094-b1c3-11e3-92b8-6bb3666a756f')

似乎 HTSQL 无法识别 UUID 类型。所以我的问题是:

有什么方法可以告诉 HTSQL 如何识别 UUID?我也可以在命令行界面上执行此操作吗?

4

1 回答 1

1

通过查看 HTSQL 的源代码,我目前对这个问题的解决方案是使用它的自省类来告诉 HTSQL 将 UUID 识别为文本:

class IntrospectPGSQLUUIDDomain(IntrospectPGSQLDomain):                    
    call(('pg_catalog', 'uuid'))                                           

    @classmethod                                                           
    def __enabled__(cls):                                                  
        return True                                                        

    def __call__(self):                                                    
        return TextDomain()

然后告诉 HTSQL 在创建数据库连接后对其进行自省:

htsql = HTSQL('pgsql:///my_database')                      
with htsql:                                                         
    introspect() 

这解决了我在python应用程序上的问题,但我仍然必须想办法在命令行上执行此操作。

于 2015-09-03T13:56:22.633 回答