psycopg2 - 如何始终将非字符串值转换为字符串

时间:2011-12-16 18:18:54

标签: python psycopg2

psycopg2的doc有关于如何将特定类型转换为其他类型的说明:

  

Psycopg将十进制/数字数据库类型转换为Python Decimal对象。我可以代替浮动吗?   您可以为PostgreSQL十进制类型注册自定义适配器:

    DEC2FLOAT = psycopg2.extensions.new_type(
        psycopg2.extensions.DECIMAL.values,
        'DEC2FLOAT',
        lambda value, curs: float(value) if value is not None else None)
    psycopg2.extensions.register_type(DEC2FLOAT)

但我的数据将混合使用str,float,integer,decimal,date type等。我如何告诉psycopg2将任何非字符串值转换为字符串?我不想在每次遇到新类型时注册自定义适配器,因为我的查询可能会发生变化 我希望我的情况足够清楚。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

您可以删除所有类型代码并接收postgres字符串表示中的所有内容:

import psycopg2

for k in psycopg2.extensions.string_types.keys():
    del psycopg2.extensions.string_types[k]

cnn = psycopg2.connect('')
cur = cnn.cursor()
cur.execute("select 1::int, now()::timestamp, 'hello'::text")
cur.fetchone()
('1', '2011-12-19 16:50:11.396855', 'hello')

答案 1 :(得分:0)

也许有足够的电话str(object)或者像object.__str__

那样使用字段str