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

时间:2011-12-20 22:46:55

标签: python psycopg2

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

2 个答案:

答案 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_typepsycopg2.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())