我正在使用python中的sqlalchemy将一些数据从一个数据库传输到另一个数据库。我想直接进行快速转移。
我不知道如何使用SQLAlchemy的bulk_insert_mappings()
函数。 (在字段方面,两个表都相同)
这是我到目前为止尝试过的。
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)”?**
有人可以帮助我吗?
谢谢。
答案 0 :(得分:0)
有很多方法可以将数据从一个数据库移到另一个数据库。该方法的特异性取决于您的个人需求以及您已经实施的方法。假设旧数据库和新数据库都已经在各自的DB中具有模式,则需要两个单独的base
和engine
。现有数据库模式的映射是使用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)以及表示数据库模型中实例(又称行)的词典列表。