Using multiple databases with single sqlalchemy model

前端 未结 1 871
南旧
南旧 2020-12-17 05:14

I want to use multiple database engines with a single sqlalchemy database model.

Following situation: I have a photo album software (python) and the different album

相关标签:
1条回答
  • 2020-12-17 05:23

    You can achieve this with multiple engines and sessions (you don't need multiple metadata):

    engine1 = create_engine("sqlite:///tmp1.db")
    engine2 = create_engine("sqlite:///tmp2.db")
    Base.metadata.create_all(bind=engine1)
    Base.metadata.create_all(bind=engine2)
    session1 = Session(bind=engine1)
    session2 = Session(bind=engine2)
    print(session1.query(Picture).all())  # []
    print(session2.query(Picture).all())  # []
    session1.add(Picture())
    session1.commit()
    print(session1.query(Picture).all())  # [Picture]
    print(session2.query(Picture).all())  # []
    session2.add(Picture())
    session2.commit()
    print(session1.query(Picture).all())  # [Picture]
    print(session2.query(Picture).all())  # [Picture]
    session1.close()
    session2.close()
    

    For scoped_session, you can create multiple of those as well.

    engine1 = create_engine("sqlite:///tmp1.db")
    engine2 = create_engine("sqlite:///tmp2.db")
    Base.metadata.create_all(bind=engine1)
    Base.metadata.create_all(bind=engine2)
    Session1 = scoped_session(sessionmaker(bind=engine1))
    Session2 = scoped_session(sessionmaker(bind=engine2))
    session1 = Session1()
    session2 = Session2()
    ...
    

    If you have a variable number of databases you need to have open, scoped_session might be a little cumbersome. You'll need some way to keep track of them.

    0 讨论(0)
提交回复
热议问题