Jai*_*gus 7 python sqlalchemy pyramid
我使用sqlalchemy表达式语言作为其表示法和连接池来创建用于与持久层通信的dao对象.我希望得到一些关于如何设置元数据和引擎的意见,以便它们可用于应用程序视图callables.根据sqlalchemy的文档http://docs.sqlalchemy.org/en/rel_0_7/core/connections.html,它们通常被绑定并声明为全局,但我没有这个或单身方法都是好主意.任何想法将不胜感激......
这是我的__init__.py文件在我的项目目录中的样子:
from pyramid.config import Configurator
from sqlalchemy import engine_from_config, MetaData, create_engine
from pyramid_beaker import session_factory_from_settings
db_url = 'postgresql://user:password@localhost/dbname'
engine = create_engine(db_url)
meta = MetaData()
def main(global_config, **settings):
meta.bind = engine
.
.
.
[other configuration settings]
Run Code Online (Sandbox Code Playgroud)
Pyramid文档包含有关将Pyramid与SQLAlchemy集成的教程.
有迹象表明,整合SQLAlchemy的交易和会话管理金字塔两个特殊的包,pyramid_tm和zope.sqlalchemy.这些一起照顾你的会议:
from sqlalchemy import engine_from_config
from .models import DBSession
def main(global_config, **settings):
"""This function returns a Pyramid WSGI application."""
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
# Configuration setup
Run Code Online (Sandbox Code Playgroud)
这里我们从.ini配置文件中获取配置设置; 并在models.py:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)
from zope.sqlalchemy import ZopeTransactionExtension
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()
class YourModel(Base):
# Define your model
Run Code Online (Sandbox Code Playgroud)
注意使用scoped_session那里,使用事务扩展与Pyramid集成.
然后在视图中,您需要做的就是使用DBSession会话工厂来获取会话:
from pyramid.view import view_config
from .models import (
DBSession,
YourModel,
)
@view_config(...)
def aview(request):
result = DBSession.query(YourModel).filter(...).first()
Run Code Online (Sandbox Code Playgroud)
提交和回滚将与请求集成; 例如,在2xx和3xx上提交,对异常进行回滚.
| 归档时间: |
|
| 查看次数: |
7145 次 |
| 最近记录: |