Я пытаюсь регулярно копировать несколько больших таблиц данных из одной базы данных в другую. В поисках быстрой передачи между двумя базами данных без изменения типов данных во время процесса, например, логическое преобразование в текст.
Я начал с панд read_sql_table()
и to_sql()
, которые хорошо сохраняют исходные типы данных вновая база данных. Однако они выполняются довольно медленно для 1M + строк данных.
Далее я попытался использовать временные файлы CSV с операторами COPY
. Это значительно улучшает время копирования и записи таблицы в новую базу данных. Тем не менее, я теряю оригинальные типы данных во время этого процесса;дата становится датой, а логическое становится текстом. В идеале я не хочу иметь дополнительный код для повторного преобразования типов данных в базе данных.
В настоящее время я изучаю идею использования sqlalchemy
для копирования таблицы и использования метаданных таблицы длязаписать таблицу в новую базу данных с ее исходными типами данных.
import sqlalchemy as db
engine = db.create_engine("postgresql+psycopg2://username:password@/database?host=datawarehouse")
connection = engine.connect()
# Gets metadata of the customers table
metadata = db.MetaData()
metadata.reflect(bind=engine)
metadata.tables['customers']
# Gets data from the customers table
customers = db.Table('customers', metadata, autoload=True, autoload_with=engine)
query = db.select([customers])
ResultProxy = connection.execute(query)
ResultSet = ResultProxy.fetchall()
Данные поступают в python как список (список списков), который копирует быстро (скорость, аналогичная временной обработке CSV).
Есть ли способ поместить данные в новую таблицу с типами данных, указанными в метаданных?
Я надеюсь, что есть способ быстрой передачи больших таблиц без потери исходных типов данных, особенно булевых. Плюс, будьте обобщаемыми для многих таблиц.
Заранее спасибо.