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-未发布

  • 初次发行 [选项]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JAXB封送字符串,具有xml值,且不转义该值   java ModelMapper转换器不工作   java像HH000412或HCANN000001这样的前缀是什么意思?   验证日期输入修复java。lang.numberformatexception错误   当表具有外键时,java Telosys代码生成失败   如何使所有派生类一起只能实例化一个实例的单例抽象基类?(爪哇)   java如何在非静态服务类中使用广播接收器   java nutch爬虫相对URL问题   使用Jboss DMR下载/保存java附件   Rest模板:无法提取响应:当我们得到xml响应时,没有找到适合响应类型的HttpMessageConverter,没有绑定到JAVA对象   java如何编写可扩展窗格/面板/卡的代码   java是在ITreeViewerListener的treeExpanded()之前调用ContentProvider的getChildren()吗?   java将JComponent添加到小程序窗格   java混淆:使用简单逻辑的Flames程序