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)
不起作用o.o它仍然返回None
答案 0 :(得分:4)
实际上NoneAdapter与你想要的相反,将python的None类型转换为SQL NULL。有关将SQL类型转换为python对象的信息,请查看official psycopg2 documentation。
基于此,看起来您必须为您希望它处理的每种类型注册适配器函数,但我认为该函数只是:
def NA(value, cur):
if value is None:
return 'NA'
return value
然后注册psycopg2.extensions.new_type
和psycopg2.extensions.register_type
。
答案 1 :(得分:0)
简单地说:
row = cux.fetchone()
field = row[col] if row[col] is not None else 'NA'
完成!
如果要将其应用于行中的所有列,请使用map():
row = map(lambda x:x,如果x不是其他'NA',cux.fetchone())