水平切分支架。
定义一个基本的“水平分片”系统,该系统允许会话在多个数据库中分发查询和持久性操作。
有关用法示例,请参见 水平切分 源分发中包含的示例。
sqlalchemy.ext.horizontal_shard.
ShardedSession
(shard_chooser, id_chooser, query_chooser, shards=None, query_cls=<class 'sqlalchemy.ext.horizontal_shard.ShardedQuery'>, **kwargs)¶基地: sqlalchemy.orm.session.Session
__init__
(shard_chooser, id_chooser, query_chooser, shards=None, query_cls=<class 'sqlalchemy.ext.horizontal_shard.ShardedQuery'>, **kwargs)¶构造一个sharedsession。
connection
(mapper=None, instance=None, shard_id=None, **kwargs)¶返回A Connection
与此对应的对象 Session
对象的事务状态。
如果这样 Session
配置为 autocommit=False
,要么 Connection
返回与当前事务对应的事务,或者如果没有正在进行的事务,则开始新的事务,并且 Connection
返回(请注意,在发出第一条SQL语句之前,不会使用DBAPI建立事务状态)。
或者,如果 Session
配置为 autocommit=True
一个自组织的 Connection
返回时使用 Engine.connect()
在底层 Engine
.
多绑定或未绑定中的模糊性 Session
对象可以通过任何可选关键字参数来解析。这最终使得 get_bind()
解决方法。
bind¶ -- 可选的 Engine
用作绑定。如果此引擎已经涉及正在进行的事务,则将使用该连接。此参数优先于 mapper
, clause
.
clause¶ -- A ClauseElement
(即 select()
, text()
等),如果无法识别绑定,则用于定位绑定。
close_with_result¶ -- 传递给 Engine.connect()
,表示 Connection
应视为“一次性使用”,第一个结果集关闭时自动关闭。只有当 Session
配置为 autocommit=True
并且没有正在进行的事务。
execution_options¶ -- 将传递给的执行选项字典 Connection.execution_options()
, 仅在首次采购连接时 . 如果连接已经存在于 Session
,将发出警告并忽略参数。…添加的版本:0.9.9..参阅: 设置事务隔离级别
**kw¶ -- 其他关键字参数发送到 get_bind()
,允许将其他参数传递给的自定义实现 get_bind()
.
get_bind
(mapper, 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.bind,则返回该值。
如果给定子句,则尝试返回链接到 MetaData
最终与该条款相关。
找不到绑定, UnboundExecutionError
提高了。
请注意 Session.get_bind()
方法可以在的用户定义子类上重写 Session
提供任何类型的绑定解决方案。参见中的示例 自定义垂直分区 .
sqlalchemy.ext.horizontal_shard.
ShardedQuery
(*args, **kwargs)¶基地: sqlalchemy.orm.query.Query
set_shard
(shard_id)¶返回一个新查询,仅限于单个碎片ID。
无论其他状态如何,返回查询的所有后续操作都将针对单个碎片。