psycopg2 - 如何将NULL类型改为字符串'NA'而不是None

2 投票
2 回答
4296 浏览
提问于 2025-04-17 08:44

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_typepsycopg2.extensions.register_type来注册。

撰写回答