Wiz*_*Wiz 2 python sqlalchemy pyramid
作为SQLAlchemy的新手,我想知道在什么时候 Session()应该调用一个视图.是应将其定义为全局变量,还是应为每个请求创建新会话.
我强烈建议您遵循Pyramid SQLAlchemy教程.它教您如何在简单的Wiki应用程序中使用SQLAlchemy和Pyramid.
您将注意到models.py创建了一个定义DBSession项目的模块教程.这使您可以访问SQLAlchemy会话,作用于Pyramid线程并绑定到Pyramid事务模型,并在需要会话时导入:
from pyramid.view import view_config
from .models import (
DBSession,
MyModel,
)
@view_config(route_name='home', renderer='templates/mytemplate.pt')
def my_view(request):
one = DBSession.query(MyModel).filter(MyModel.name=='one').first()
return {'one':one, 'project':'tutorial'}
Run Code Online (Sandbox Code Playgroud)
在models.pyDBSession中,变量定义如下:
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)
from zope.sqlalchemy import ZopeTransactionExtension
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Run Code Online (Sandbox Code Playgroud)
注意ZopeTransactionExtension; Pyramid会自动为每个请求启动一个新事务,将其提交给成功的响应,并在发生异常时将其中止.这使您免除了大多数交易处理职责.只需记住.flush您需要查看数据库更新的会话(例如自动递增主键).
同样,本教程将扩展所有这些以及更多内容.
| 归档时间: |
|
| 查看次数: |
1729 次 |
| 最近记录: |