SQLAlchemy/Zope2事务集成
项目描述
简介
炼金术士工具箱的领导部分。
是的,它又是另一个SQLAlchemy/Zope集成包。我很抱歉,我确实是。非常感谢Andreas Jung的z3c.sqlalchemy和Kapil Thangavelu的ore.alchemist。我借用Andreas从Kapil那里得到的Zope事务数据管理器代码,我相信。
此包的目的是仅作为领导部分。金子制造的部分留给SQLAlchemy。这意味着在构建SQLAlchemy表元数据和映射器时,没有抽象或延迟初始化或自动检测表,没有生成Zope 3接口,没有CRUD操作,也没有跳舞的北极熊。
您需要理解SQLAlchemy才能理解此包和此README。请参阅https://sqlalchemy.org.cn/docs/。
请注意,此包仅用作其他包中的工具;您不能直接在Zope站点中安装它。
使用案例
您想要SQLAlchemy
您想要按名称查找数据库连接/会话作为命名实用程序
您想要使用简单的领域/映射器类,没有特定的依赖关系
您不希望担心事务和连接处理
您希望在运行时配置SQL连接参数,例如在ZODB中。好吧,您不必这样做,但有一个选项是很好的。
您必须做什么
假设我们有一些领域类TableOne和TableTwo,它们与表table1和table2相关。
>>> 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 - 未发布
初始发布 [optilude]
项目详细信息
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。