psycopg2 - как изменить тип NULL на строку 'NA' вместо None - PullRequest
1 голос
/ 21 декабря 2011

psycopg2 преобразует NULL в None через NoneAdapter (верно?) Как создать другой адаптер, который преобразует все 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)  

Не работаетoo он все еще возвращает None

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

На самом деле NoneAdapter делает противоположное тому, что вы хотите, преобразует тип None Python в 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.

0 голосов
/ 23 декабря 2011

Просто сделайте:

row = cux.fetchone()
field = row[col] if row[col] is not None else 'NA'

Готово! * * 1004

Если вы хотите применить его ко всем столбцам в строке, используйте map ():

row = map (лямбда x: x, если x не None, кроме 'NA', cux.fetchone ())

...