получение повторного преобразования в postgres с помощью psycopg2

#python #postgresql #numpy #psycopg2 #recarray

#python #postgresql #numpy #psycopg2 #перенастройка

Вопрос:

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

Например, данные переписи с 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:

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 непосредственно в качестве параметров запроса.

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