为使用SQLAlchemy在WSGI应用程序中提供了一种合理的方法
项目描述
摘要
为使用SQLAlchemy在WSGI应用程序中提供了一种合理的方法
开始使用
使用easy_install SQLAlchemyManager安装。
简介
SQLAlchemy有两个问题
它非常强大,因此可以用在很多不同的方式,但理解不同的选项可能很困难。
为了在Pylons中使SQLAlchemy更简单,使用了scoped_session、g、MetaData等对象,这些对象进一步抽象了用户对正在发生的事情的了解,并且在试图掌握它时,使SQLAlchemy看起来更加难以理解。
这个中间件在WSGI中间件中设置了标准的SQLAlchemy对象,而不做任何特别聪明的事情,也不使用任何全局对象。
除了在Pylons等框架中使事情稍微简单一些之外,本模块中推荐的设置还提供了其他应用程序(如AuthKit,它可以使用自己的SQLAlchemy对象)的API,以便与其他应用程序的SQLAlchemy对象一起设置,即使这些应用程序依赖于数据库也是如此。这反过来又允许开发者对代码的某些部分进行组件化,即使它们依赖于数据库。
教程
以下是SQLAlchemyManager在Pylons应用程序中的使用方法。
在你的config/middleware.py文件顶部
from yourproject.model import setup_model from sqlalchemymanager import SQLAlchemyManager
然后,在设置PylonsApp的行之后
app = SQLAlchemyManager(app, app_conf, [setup_model])
你的model/__init__.py文件看起来像这样
from sqlalchemy import Column, Table, types
from sqlalchemy.orm import mapper, relation
def setup_model(model, metadata, **p):
model.table1 = Table("table1", metadata,
Column("id", types.Integer, primary_key=True),
Column("name", types.String, nullable=False),
)
class MyClass(object):
pass
model.MyClass = MyClass
model.table1_mapper = mapper(model.MyClass, model.table1)
这意味着你可以编写这样的代码
from sqlalchemy.sql import select
def app(environ, start_response):
# The model is the same across requests so is safe to save as a global
# somewhere in your application.
model = environ['sqlalchemy.model']
# You will get a new session object on each request so you shouldn't save it
session = environ['sqlalchemy.session']
# Use the SQLExpression API via the session object
select_statement = select([model.table1])
select_result = [row for row in session.execute(select_statement)]
# Or use the ORM API
mr_jones = model.MyClass()
mr_jones.name = 'Mr Jones'
session.save(mr_jones)
session.commit()
multiple_mr_jones = session.query(model.MyClass).filter(model.MyClass.name=='Mr Jones').all()
# Return the data
start_response('200 OK', [('Content-Type', 'text/plain')])
return [
'''
Select Result:
%s
Mr Jones Results:
%s
'''%(
select_result,
', '.join([person.name for person in multiple_mr_jones])
)
]
请注意,我们正在使用 SQLAlchemy 的 ORM 和 SQL 表达式功能,并且连接池等选项仍然可以完美工作。此外,现有的 SQLAlchemy 配置无需太多修改即可与该中间件配合使用。只需将它们的模型定义包装在函数中,并确保所有 SQLAlchemy 对象都显式地分配给 model 即可。
这是基础知识。如果您要创建表,有多种方法可以做到这一点
您可以在请求期间创建所需的表,如下所示
# Create the tables environ['sqlalchemy.manager'].create_all()
或者如果您正在使用脚本,您可以这样做
from yourproject.model import setup_model from sqlalchemymanager import SQLAlchemyManager
然后,在设置PylonsApp的行之后
manager = SQLAlchemyManager(None, app_conf, [setup_model]) manager.create_all()
要进行任何操作,您需要创建自己的会话
connection = manager.engine.connect()
session = manager.session_maker(bind=connection)
try:
# Do stuff here
pass
finally:
session.close()
connection.close()
变更
0.1.0
第一版
许可
MIT 许可证
版权所有 (c) 2007 James Gardner
在此特此授予任何获得本软件及其相关文档文件(“软件”)副本的个人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供方提供软件的个人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和未经侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是在合同、侵权或其他方式中产生的,以及与软件或软件的使用或其他交易有关。
下载
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。