sqlalchemy/zope2事务集成
collective.lead的Python项目详细描述
简介
炼金术士工具箱的主要部分。
是的,这是另一个sqlalchemy/zope集成包。对不起, 我真的是。非常感谢Andreas Jung的Z3C.SqlAlchemy和Kapil 矿石炼金术士。我借用了zope事务数据 我相信是安德烈亚斯从卡皮尔那里借来的经理代码。
此包装的目的是作为主导部分和唯一的主导部分。 黄金的制造权留给了sqlalchemy。也就是说那不是 建筑物的抽象或延迟初始化或表自动检测 sqlalchemy表元数据和映射器,不生成zope 3接口, 没有积垢手术,也没有跳舞的北极熊。
您需要了解这个包的sqlalchemy和本自述文件 任何感觉。见http://sqlalchemy.org/docs/。
请注意,此软件包仅用作 包;不能直接在zope站点中安装它。
用例
- You want SQLAlchemy
- You want to look up database connections/sessions as named utilities
- You want to use simple domain/mapper classes, with no particular dependencies
- You don’t want to worry about transaction and connection handling
- You want to be able to configure SQL connection parameters at run-time, e.g. in the ZODB. Well, you don’t have to, but it’s nice to have the option.
你要做什么
假设我们有一些域类tableone和table2,与表相关 表1和表2。
>>> class TableOne(object): ... pass >>> class TableTwo(object): ... pass
您应该将collective.lead.database子类化,填写它的模板 方法,然后将新类注册为全局的、非持久的 提供IDatabase的命名实用程序。
>>> from collective.lead import Database >>> import sqlalchemy as sa>>> class MyDatabase(Database): ... @property ... def _url(self): ... return sa.engine.url.URL(drivername='mysql', username='user', ... host='localhost', database='testdb') ... ... def _setup_tables(self, metadata, tables): ... tables['table1'] = sa.Table('table1', metadata, autoload=True) ... tables['table2'] = sa.Table('table2', metadata, autoload=True) ... ... def _setup_mappers(self, tables, mappers): ... mappers['table1'] = sa.mapper(TableOne, tables['table1']) ... mappers['table2'] = sa.mapper(TableTwo, tables['table2'], ... properties = { ... 'table1' : sa.relation(TableOne), ... })
现在可以使用zcml注册数据库实用程序:
- <utility
- provides=”collective.lead.interfaces.IDatabase” factory=”.database.MyDatabase” name=”my.database” />
或者如果您喜欢直接从python(xxx,这不起作用):
>>> from zope.component import provideUtility >>> from collective.lead.interfaces import IDatabase >>> provideUtility(MyDatabase, name='my.database', provides=IDatabase)
使用数据库连接
在应用程序代码中,现在可以按名称获取数据库引擎。这个引擎 是线程本地的,并且包含单个缓存会话。当它第一次 请求时,将开始新的交易。这是连接到zope的 事务,并在请求时根据需要提交或回滚 末端。或者,换言之,它应该或多或少地像你期望的那样工作 您不必担心事务(无论是zope还是sql事务)。
>>> from zope.component import getUtility >>> db = getUtility(IDatabase, name='my.database') >>> db.session.query(TableOne).list() []>>> db.connection.execute("SELECT * FROM table1")
更改日志
1.0-未发布
- 初次发行 [选项]