psycopg2 - 如何始终将非字符串值转换为字符串
psycopg2的文档里有说明,怎么把一种特定的数据类型转换成另一种类型:
Psycopg会把数据库里的小数/数字类型转换成Python的Decimal对象。那我能不能用float类型呢?
你可以为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)
但是我的数据会有字符串、浮点数、整数、小数、日期等多种类型。我该怎么告诉psycopg2把任何非字符串的值都转换成字符串呢?我不想每次遇到新类型的时候都注册一个自定义适配器,因为我的查询可能会变化。
我希望我把情况说明得够清楚。谢谢!
2 个回答
0
也许可以直接调用 str(object)
,或者获取对象的字符串表示方法,比如 object.__str__
。
4
你可以删除所有的类型转换器,然后以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')