我在用SQLalchemy构造我的模型时使用的是声明性的。。。 所以我有一个模型是这样的:
from sqlalchemy.orm import sessionmaker, scoped_session
engine = create_engine("mysql...")
session_factory = sessionmaker(bind=engine)
SessionHeap = scoped_session(session_factory)
Base = declarative_base()
class MyTable(Base, Actions):
__tablename__ = 'mytable'
id = Column(Integer, primary_key=True)
date = Column(Integer)
tag = Column(String(50))
class Actions(object):
@classmethod
def create(cls, **kwargs):
session = SessionHeap()
session.add(cls(**kwargs))
session.commit()
session.close()
SessionHeap.remove()
def update(self, **kwargs):
for key, val in kwargs.iteritems():
self.__setattr__(key, val)
session = inspect(self).session
session.commit()
@classmethod
def _search(cls, **kwargs):
session = SessionHeap()
query = session.query(cls).filter_by(**kwargs)
session.commit()
session.close()
SessionHeap.remove()
return query
我不知道什么时候该打电话会话.关闭()或者甚至何时删除会话,我一直有麻烦,尤其是在查询时,某些会话无法关闭,数据库会挂起。什么是更好的模式?(注意,我希望将所有方法包装到模型本身中,而不是其他全局命名空间中)
简单回答:这是特定于应用程序的。在
如果要实现长时间运行的流程(如后端守护进程),则可能需要在每个会话生命周期内执行多个提交。如果您正在处理一个HTTP应用程序,模式通常是每个HTTP请求一次提交(在最后,在连接断开时)。大多数现代web框架都提供了请求设置/删除的钩子。例如,在烧瓶里你可以把你会话.提交() / 会话.关闭()在一种装饰有@app.teardown_请求. 在
我建议采用以下方法:
相关问题 更多 >
编程相关推荐