psycopg2 - как всегда приводить не строковое значение в строку - PullRequest
2 голосов
/ 16 декабря 2011

В документации psycopg2 есть инструкция о том, как привести конкретный тип к другому типу:

Psycopg преобразует десятичные / числовые типы баз данных в объекты Python Decimal.Могу ли я вместо этого использовать float?
Вы можете зарегистрировать настраиваемый адаптер для десятичного типа PostgreSQL:

    DEC2FLOAT = psycopg2.extensions.new_type(
        psycopg2.extensions.DECIMAL.values,
        'DEC2FLOAT',
        lambda value, curs: float(value) if value is not None else None)
    psycopg2.extensions.register_type(DEC2FLOAT)

Но мои данные будут иметь смесь типа str, float, integer, decimal, dateи т. д. Как мне сказать psycopg2 приводить любое не строковое значение в строку?Я не хочу регистрировать настроенный адаптер каждый раз, когда сталкиваюсь с новым типом, потому что мой запрос может измениться.
Надеюсь, я проясню ситуацию достаточно.заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Вы можете удалить все типы типов и получить все в строковом представлении postgres:

import psycopg2

for k in psycopg2.extensions.string_types.keys():
    del psycopg2.extensions.string_types[k]

cnn = psycopg2.connect('')
cur = cnn.cursor()
cur.execute("select 1::int, now()::timestamp, 'hello'::text")
cur.fetchone()
('1', '2011-12-19 16:50:11.396855', 'hello')
0 голосов
/ 16 декабря 2011

Может быть, достаточно позвонить str(object) или взять поле str, как object.__str__

...