from sqlalchemy import Column, String, create_engine from sqlalchemy.orm import sessionmaker, scoped_session from sqlalchemy.ext.declarative import declarative_base # 建立對象的基類: from werkzeug.local import LocalProxy Base = declarative_base() # 定義User對象: class User(Base): # 表的名字: __tablename__ = 'user' # 表的結構: id = Column(String(20), primary_key=True) name = Column(String(20)) # # 初始化數據庫鏈接: # engine = create_engine('sqlite:///test1.db') # # 建立DBSession類型: # DBSession = sessionmaker(bind=engine) db_flag = 1 class SessionManager(object): def __init__(self, base_uri=None, **kwargs): self.session = None self.base_uri = base_uri self.kwargs = kwargs def get_session(self): if db_flag == 1: db_name = 'db1.db' else: db_name = 'db2.db' if self.session: if self.session.name == db_name: return self.session else: self.session.remove() self.session = None if not self.session: engine = create_engine(self.base_uri % db_name, **self.kwargs) Base.metadata.create_all(engine) db_session = scoped_session(sessionmaker(bind=engine)) db_session.name = db_name self.session = db_session return db_session session_manager = SessionManager(base_uri='sqlite:///%s', pool_recycle=3600) db_session = LocalProxy(session_manager.get_session) def save_user(): # 建立session對象: # session = DBSession() # # 建立新User對象: # new_user = User(id='5', name='Bob') # # 添加到session: # session.add(new_user) # # 提交即保存到數據庫: # session.commit() # # 關閉session: # session.close() new_user = User(id='1', name='Zhanghai') db_session.add(new_user) db_session.commit() db_session.close() # def get_user(): # session = DBSession() # one = session.query(User).filter(User.id == 5).one() # print(one.name) # def get_user(): one = db_session.query(User).filter(User.id == 1).one() print(one.name) if __name__ == '__main__': # save_user() get_user()