получить повторный массив в postgres с помощью psycopg2 - PullRequest
0 голосов
/ 10 мая 2011

Хотелось бы получить краткое представление о лучшем, то есть наименьшем кодировании, способе пересылки большого количества данных в postgres с использованием psycopg2. Я видел некоторые вещи, использующие актерский состав, но на самом деле я думал, что это будет просто, и я мог найти что-то хорошее в Интернете.

В примере приведены данные переписи с 200 переменными, считанными в массиве данных с различными типами данных для многих столбцов. Я хочу просто просмотреть имена столбцов и типы данных и ввести их в postgres.

Также, если есть что-то лучше, чем psycopy2, я открыт для предложений.

Это то, что я нашел, хотя это идет в sqlight и неправильный путь.

elif driver=='sqlite3':
                    tups=cur.fetchall()
                    if len(tups)>0:
                            _cast = {types.BooleanType: numpy.bool,
                                    types.IntType: numpy.int32,
                                    types.LongType: numpy.int64,
                                    types.FloatType: numpy.float64,
                                    types.StringType: numpy.str,
                                    types.UnicodeType: numpy.str}
                            try:
                                    typelist=[_cast[type(tmp)] for tmp in tups[0]]
                            except KeyError:
                                    raise Exception("Unknown datatype")
                            res = numpy.core.records.array(tups)
                    else:
                            return None
            res=[res[tmp] for tmp in res.dtype.names]
    except BaseException:

1 Ответ

2 голосов
/ 11 мая 2011

Psycopg может быть расширен с помощью нового адаптера (если вы хотите передать объект Python в Postgres) или нового Typecaster (когда вы хотите читать из Postgres и получать объекты Python).

Похоже, вам нужно зарегистрировать некоторые из существующих адаптеров для типов numpy, например:

>>> psycopg2.extensions.register_adapter(numpy.int32, psycopg2._psycopg.AsIs)
>>> psycopg2.extensions.adapt(numpy.int32(42)).getquoted()
'42'

>>> psycopg2.extensions.register_adapter(numpy.str, psycopg2._psycopg.QuotedString)
>>> psycopg2.extensions.adapt(numpy.str("Hi 'quote'")).getquoted()
"'Hi ''quote'''"

С этими регистрациями вы можете использовать типы numpy непосредственно в качестве параметров запроса.

Более подробную информацию и справку вы можете получить в Списке рассылки .

...