SQLAlchemy: Как перенести данные из одной таблицы в старой БД в другую таблицу в новой / другой БД? - PullRequest
0 голосов
/ 24 сентября 2018

Я передаю некоторые данные из одной БД в другую БД, используя sqlalchemy в python.Я хочу сделать прямой и быстрый перевод.

Я не знаю, как использовать функцию bulk_insert_mappings() из SQLAlchemy.(Обе таблицы одинаковы)

Это то, что я пробовал до сих пор.

from sqlalchemy import create_engine, Column, Integer, String, Date  
from sqlalchemy.orm import sessionmaker  
from sqlalchemy.ext.declarative import declarative_base  

engine_old = create_engine('mysql+pymysql://<id>:<pw>@database_old.amazonaws.com:3306/schema_name_old?charset=utf8')  
engine_new = create_engine('mysql+pymysql://<id>:<pw>@database_new.amazonaws.com:3306/schema_name_new?charset=utf8')   

data_old = engine_before.execute('SELECT * FROM table_old')  

session = sessionmaker()  
session.configure(bind=engine_after)  
s = session()  

как работать с "s.bulk_insert_mappings (????, data_old)"? **

Кто-нибудь может мне помочь?

Спасибо.

1 Ответ

0 голосов
/ 24 сентября 2018

Существует много способов перемещения данных из одной базы данных в другую.Специфика метода зависит от ваших индивидуальных потребностей и от того, что вы уже реализовали.Предполагая, что и старая, и новая базы данных уже имеют схему в своих соответствующих БД, вам потребуются две отдельные base s и engine s.Отображение схемы существующей базы данных достигается с помощью automap_base().Ниже я поделюсь кратким примером того, как это будет выглядеть:

from sqlalchemy.orm import Session
from sqlalchemy import create_engine
from sqlalchemy.ext.automap import automap_base

old_base = automap_base()
old_engine = create_engine("<OLD_DB_URI>", echo=True)
old_base.prepare(old_engine, reflect=True)
TableOld = old_base.classes.table_old
old_session = Session(old_engine)

new_base = automap_base()
new_engine = create_engine("<NEW_DB_URI>", echo=True)
new_base.prepare(new_engine, reflect=True)
TableNew = old_base.classes.table_new
new_session = Session(new_engine)

# here you can write your queries
old_table_results = old_session.query(TableOld).all()
new_data = []
for result in old_table_results:
    new = TableNew()
    new.id = result.id
    new.name = result.name
    new_data.append(new)
new_session.bulk_save_objects(new_data)
new_session.commit()

Теперь, о втором вопросе, вот ссылка на примеры непосредственно с сайта SQLAlchemy: http://docs.sqlalchemy.org/en/latest/_modules/examples/performance/bulk_inserts.html и чтобы ответить на ваш вопросbulk_insert_mappings принимает два параметра модель db (TableNew или TableOld) в приведенном выше примере и список словарей, представляющих экземпляры (также известные как строки) в модели db.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...