水平切分
水平切分支架。
定义一个基本的“水平分片”系统,该系统允许会话在多个数据库中分发查询和持久性操作。
有关用法示例,请参见 水平切分 源分发中包含的示例。
API文档
Object Name | Description |
---|---|
- class sqlalchemy.ext.horizontal_shard.ShardedSession(shard_chooser, id_chooser, execute_chooser=None, shards=None, query_cls=<class 'sqlalchemy.ext.horizontal_shard.ShardedQuery'>, **kwargs)¶
类签名
class
sqlalchemy.ext.horizontal_shard.ShardedSession
(sqlalchemy.orm.session.Session
)- method
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.4execute_chooser
参数取代query_chooser
参数。
- method
sqlalchemy.ext.horizontal_shard.ShardedSession.
connection_callable(mapper=None, instance=None, shard_id=None, **kwargs)¶ 提供一个
Connection
在工作单元冲洗过程中使用。
- method
sqlalchemy.ext.horizontal_shard.ShardedSession.
get_bind(mapper=None, shard_id=None, instance=None, clause=None, **kw)¶ 返回一个“绑定”,此
Session
是绑定的。“bind”通常是
Engine
,除非Session
已直接绑定到Connection
.对于多重绑定或未绑定
Session
, themapper
或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
提供任何类型的绑定解决方案。参见中的示例 自定义垂直分区 .- 参数
参见
- method
- class sqlalchemy.ext.horizontal_shard.ShardedQuery(*args, **kwargs)¶
类签名
class
sqlalchemy.ext.horizontal_shard.ShardedQuery
(sqlalchemy.orm.Query
)- method
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"} )
- method