SQLAlchemy:如何将数据从旧数据库中的一个表传输到新/不同数据库中的另一个表?

jg *_*kim 2 python sqlalchemy

我正在使用 python 中的 sqlalchemy 将一些数据从一个数据库传输到另一个数据库。我想直接快速转账。

我不知道如何使用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()  
Run Code Online (Sandbox Code Playgroud)

如何处理“s.bulk_insert_mappings(????, data_old)”?**

有人可以帮助我吗?

谢谢你。

lv1*_*v10 5

有很多方法可以实现将数据从一个数据库移动到另一个数据库。该方法的特殊性取决于您的个人需求和您已经实施的内容。假设旧数据库和新数据库在它们各自的数据库中都有一个模式,您将需要两个单独的bases 和engines。现有数据库模式的映射是使用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()
Run Code Online (Sandbox Code Playgroud)

现在,关于你的第二个问题,这里有一个直接来自 SQLAlchemy 网站的示例链接:http : //docs.sqlalchemy.org/en/latest/_modules/examples/performance/bulk_inserts.html并回答你的问题bulk_insert_mappings需要一个两个参数 a db上面示例中的模型(TableNew 或 TableOld)以及表示 db 模型中的实例(又名行)的字典列表。