为使用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
在此特此授予任何获得本软件及其相关文档文件(“软件”)副本的个人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供方提供软件的个人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和未经侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是在合同、侵权或其他方式中产生的,以及与软件或软件的使用或其他交易有关。
下载
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。