目录

水平切分

优质
小牛编辑
141浏览
2023-12-01

水平切分支架。

定义一个基本的“水平分片”系统,该系统允许会话在多个数据库中分发查询和持久性操作。

有关用法示例,请参见 水平切分 源分发中包含的示例。

API文档

Object NameDescription

ShardedQuery

ShardedSession

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.4 execute_chooser 参数取代 query_chooser 参数。

  • shards -- 字符串碎片名称字典 Engine 物体。

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 , the mapperclause 参数用于确定要返回的适当绑定。

注意,“mapper”参数通常在 Session.get_bind() 通过ORM操作调用,例如 Session.query() ,中的每个插入/更新/删除操作 Session.flush() ,电话等。

决议顺序为:

  1. 如果给出映射器并且 Session.binds 如果存在,则首先基于正在使用的映射器,然后基于正在使用的映射类,然后基于中存在的任何基类定位绑定 __mro__ 从更具体的超类到更一般的映射类。

  2. 如果给出条款和 Session.binds 存在,则根据 Table 在给定子句中找到的对象存在于 Session.binds .

  3. 如果 Session.binds 存在,还那个。

  4. 如果给定子句,则尝试返回链接到 MetaData 最终与该条款相关。

  5. 如果给定了映射器,则尝试返回链接到 MetaData 最终与 Table 或映射器映射到的其他可选对象。

  6. 找不到绑定, UnboundExecutionError 提高了。

请注意 Session.get_bind() 方法可以在的用户定义子类上重写 Session 提供任何类型的绑定解决方案。参见中的示例 自定义垂直分区 .

参数

参见

分区策略(例如,每个会话有多个数据库后端)

Session.binds

Session.bind_mapper()

Session.bind_table()

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"}
)