我有两个具有相同架构的不同mysql数据库。 简而言之,我想使用sqlalchemy从一个数据库中读取并将数据插入到另一个数据库中。
到目前为止,这是我的代码
Base = declarative_base()
class Test(Base):
__tablename__ = 'test'
ID = Column(Integer,primary_key=True)
Name = Column(String,nullable=True)
Updated = Column(Integer)
sourceEngine = create_engine(sourceDBString)
destEngine = create_engine(destDBString)
Base.metadata.bind = sourceEngine
SourceSession = sessionmaker()
SourceSession.bind = sourceEngine
DestSession = sessionmaker(destEngine)
source_session = SourceSession()
destSession = DestSession()
notupdated = source_session.query(Test).filter_by(Updated=0)
for row in notupdated:
row.Updated=1
destSession.add_all(notupdated)
destSession.commit()
source_session.commit()
destSession.close()
source_session.close()
我得到的错误是:
sqlalchemy.exc.InvalidRequestError: Object '<Test at 0x7f7e1a83ce50>' is already attached to session '1' (this is '2')
似乎我只能将对象Test一次绑定到一个引擎,有什么方法可以设置两个引擎来使用它吗?
答案 0 :(得分:1)
您必须致电make_transient
将对象从一个会话转移到另一个会话。您可能还希望通过将obj.id
列设置为None
来清除required
列。
这个问题应该会对你有所帮助。 How to use make_transient() to duplicate an SQLAlchemy mapped object?