水平切分支架。
定义一个基本的“水平分片”系统,该系统允许会话在多个数据库中分发查询和持久性操作。
有关用法示例,请参见 水平切分 源分发中包含的示例。
Object Name | Description |
---|---|
sqlalchemy.ext.horizontal_shard.ShardedSession.
__init__(shard_chooser, id_chooser, execute_chooser=None, shards=None, query_cls=<class 'sqlalchemy.ext.horizontal_shard.ShardedQuery'>, **kwargs)¶构造一个sharedsession。
shard_chooser¶ -- 一个可调用文件,它传递一个映射器、一个映射实例,可能还有一个SQL子句,返回一个分片ID。这个ID可能基于对象中的属性,或者基于某个循环方案。如果方案基于一个选择,它应该在实例上设置任何状态,以便将来将其标记为参与该碎片。
id_chooser¶ -- 一个可调用的,传递了一个查询和一个标识值元组,它应该返回一个ID可能驻留的shard id列表。将按此列表的顺序查询数据库。
execute_chooser¶ -- 为了一个给定的 ORMExecuteState
,返回应在其中发出查询的碎片ID的列表。返回的所有碎片的结果将合并到一个列表中。。版本更改::1.4 execute_chooser
参数取代 query_chooser
参数。
sqlalchemy.ext.horizontal_shard.ShardedSession.
connection_callable(mapper=None, instance=None, shard_id=None, **kwargs)¶提供一个 Connection
在工作单元冲洗过程中使用。
sqlalchemy.ext.horizontal_shard.ShardedSession.
get_bind(mapper=None, shard_id=None, instance=None, clause=None, **kw)¶返回一个“绑定”,此 Session
是绑定的。
“bind”通常是 Engine
,除非 Session
已直接绑定到 Connection
.
对于多重绑定或未绑定 Session
, the mapper
或 clause
参数用于确定要返回的适当绑定。
注意,“mapper”参数通常在 Session.get_bind()
通过ORM操作调用,例如 Session.query()
,中的每个插入/更新/删除操作 Session.flush()
,电话等。
决议顺序为:
如果给出映射器并且 Session.binds
如果存在,则首先基于正在使用的映射器,然后基于正在使用的映射类,然后基于中存在的任何基类定位绑定 __mro__
从更具体的超类到更一般的映射类。
如果给出条款和 Session.binds
存在,则根据 Table
在给定子句中找到的对象存在于 Session.binds
.
如果 Session.binds
存在,还那个。
如果给定子句,则尝试返回链接到 MetaData
最终与该条款相关。
找不到绑定, UnboundExecutionError
提高了。
请注意 Session.get_bind()
方法可以在的用户定义子类上重写 Session
提供任何类型的绑定解决方案。参见中的示例 自定义垂直分区 .
sqlalchemy.ext.horizontal_shard.ShardedQuery.
set_shard(shard_id)¶返回一个新的查询,仅限于一个shard ID。
无论其他状态如何,返回查询的所有后续操作都将针对单个碎片。
对于2.0样式的执行,可以将shard_id传递给的bind_arguments字典 Session.execute()
::
results = session.execute(
stmt,
bind_arguments={"shard_id": "my_shard"}
)
flambé! the dragon and The Alchemist image designs created and generously donated by Rotem Yaari.
Created using Sphinx 4.2.0.