psycopg2 - 如何将NULL类型改为字符串'NA'而不是None
psycopg2会通过NoneAdapter把NULL转换成None,对吧?我该怎么创建一个新的适配器,把所有的NULL都转换成字符串'NA'呢?
谢谢
*更新:
@thatisbrilliant
这是我现在的情况:在执行这个查询后:
SELECT pg_type.oid
FROM pg_type JOIN pg_namespace
ON typnamespace = pg_namespace.oid
WHERE typname = 'point'
AND nspname = 'pg_catalog';
我得到了point_oid
= 600,所以我继续进行这个:
def NA(value, cur):
if value is None:
return 'NA'
return value
None2NA = psycopg2.extensions.new_type((600,), 'None2NA', NA)
psycopg2.extensions.register_type(None2NA)
但是不行哦,它还是返回None。
2 个回答
0
简单来说,你只需要这样做:
row = cux.fetchone()
field = row[col] if row[col] is not None else 'NA'
完成了!
如果你想把这个方法应用到这一行的所有列上,可以使用map()函数:
row = map(lambda x: x if x is not None else 'NA', cux.fetchone())
4
其实,NoneAdapter做的正好是你不想要的事情,它把Python中的None类型转换成SQL中的NULL。想了解如何把SQL类型转换成Python对象,可以查看官方的psycopg2文档。
根据这些信息,看起来你需要为每种你想要使用的类型注册一个适配器函数,但我想这个函数应该很简单:
def NA(value, cur):
if value is None:
return 'NA'
return value
然后用psycopg2.extensions.new_type
和psycopg2.extensions.register_type
来注册。