这个包包含了相对较少的过渡元素,以允许“2.0模式”在SQLAlchemy 1.4中发生。这里提供的主要对象是 Engine
和 Connection
,它们都是现有 Engine
和 Connection
对象的方法集更小,并且删除了“autocommit”。
在1.4系列中,通过传递 create_engine.future
旗到 create_engine()
::
from sqlalchemy import create_engine
engine = create_engine("postgresql://user:pass@host/dbname", future=True)
类似地,对于ORM,启用ORM中的“未来”行为 Session
通过 Session.future
参数 Session
直接或通过 sessionmaker
班级:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine, future=True)
参见
迁移到Alchemy -SQLAlchemy 2.0系列简介
Object Name | Description |
---|---|
为打包的DB-API连接提供高级功能。 |
|
create_engine(*arg, **kw) |
创建新的 |
select(*entities) |
构建新的 |
为打包的DB-API连接提供高级功能。
这个 Connection
对象是通过调用 Engine.connect()
的方法。 Engine
对象,并为执行SQL语句和事务控制提供服务。
这是SQLAlchemy 2.0版本 的 Connection
班级。此对象的API和行为基本相同,但在行为上存在以下差异:
为结果返回的结果对象是 CursorResult
对象,该对象是 Result
。此对象的API和行为与 LegacyCursorResult
返回以供1.x样式使用。
对象有 Connection.commit()
和 Connection.rollback()
方法提交或回滚当前正在进行的事务(如果有)。
该对象具有“自动注册”行为,因此任何调用 Connection.execute()
将无条件启动一个可以使用上述方法控制的事务 Connection.commit()
和 Connection.rollback()
方法。
对象没有任何“自动提交”功能。在显式提交事务之前,任何SQL语句或DDL语句后面都不会有任何提交,或者通过 Connection.commit()
方法,或者如果连接正在提交的上下文管理器中使用,例如 Engine.begin()
.
SAVEPOINT方法 Connection.begin_nested()
返回A NestedTransaction
与往常一样,保存点可以通过调用 NestedTransaction.commit()
或 NestedTransaction.rollback()
和以前一样。但是,这个保存点“事务”与由连接本身控制的事务没有关联;可以直接提交或回滚整个事务,这不会为保存点发出任何特殊指令(这通常会产生人们想要的效果)。
这个 Connection
对象不支持“分支”,这是一种将此连接引用为父连接的子“连接”使用模式。
sqlalchemy.future.Connection.
begin()¶在自动注册之前开始事务。
返回的对象是 RootTransaction
。此对象表示事务的“作用域”,当 Transaction.rollback()
或 Transaction.commit()
方法被调用。
这个 Connection.begin()
方法在SQLAlchemy 2.0中开始一个事务,通常在连接第一次用于执行语句时都将开始该事务。使用此方法的原因是调用 ConnectionEvents.begin()
事件,或根据上下文管理的块在连接签出范围内组织代码,例如:
with engine.connect() as conn:
with conn.begin():
conn.execute(...)
conn.execute(...)
with conn.begin():
conn.execute(...)
conn.execute(...)
上面的代码与下面的代码在行为上没有什么本质上的不同,下面的代码没有使用 Connection.begin()
;以下样式称为“随走随用”样式:
with engine.connect() as conn:
conn.execute(...)
conn.execute(...)
conn.commit()
conn.execute(...)
conn.execute(...)
conn.commit()
从数据库的角度来看 Connection.begin()
Python的DBAPI不以任何方式发出底层DBAPI的连接或任何形式的DBAPI。
参见
处理事务和DBAPI - in the SQLAlchemy 1.4/2.0教程
Connection.begin_nested()
-使用保存点
Connection.begin_twophase()
-使用两阶段/XID交易
Engine.begin()
- context manager available from
Engine
sqlalchemy.future.Connection.
begin_nested()¶开始嵌套事务(即保存点)并返回事务句柄。
返回的对象是 NestedTransaction
.
嵌套事务需要基础数据库中的保存点支持。层次结构中的任何事务都可以 commit
和 rollback
但是,最外层的事务仍然控制整个 commit
或 rollback
一个整体的交易。
如果外部 RootTransaction
不在此上 Connection
,使用“AutoBegin”创建一个新的。此外部事务可以使用“随用随用”风格使用来完成,方法是调用 Connection.commit()
或 Connection.rollback()
。
小技巧
的“自动开始”行为 Connection.begin_nested()
是特定于 2.0 style 使用;有关传统行为,请参见 Connection.begin_nested()
。
这个 NestedTransaction
保持独立于 Connection
对象本身。调用 Connection.commit()
或 Connection.rollback()
将始终影响实际包含的数据库事务本身,而不是保存点本身。提交数据库事务时,将清除已建立的任何SAVEPOINT,并提交其作用域内的数据更改。
sqlalchemy.future.Connection.
close()¶关闭此 Connection
.
这也有召唤的作用 Connection.rollback()
如果有任何交易到位。
sqlalchemy.future.Connection.
commit()¶提交当前正在进行的事务。
此方法提交当前事务(如果已启动)。如果没有启动任何事务,则假定连接处于非无效状态,则该方法无效。
交易开始于 Connection
当第一次执行语句时自动执行,或者 Connection.begin()
方法被调用。
注解
这个 Connection.commit()
方法仅作用于链接到的主数据库事务 Connection
对象。它不会对从中调用的保存点进行操作 Connection.begin_nested()
方法;若要控制保存点,请调用 NestedTransaction.commit()
上 NestedTransaction
由 Connection.begin_nested()
方法本身。
sqlalchemy.future.Connection.
execute(statement, parameters=None, execution_options=None)¶执行SQL语句构造并返回 Result
.
statement¶ --
要执行的语句。这始终是一个同时位于 ClauseElement
和 Executable
层次结构,包括:
DDL
and objects which inherit from
DDLElement
parameters¶ -- 将绑定到语句中的参数。这可以是参数名到值的字典,也可以是字典的可变序列(例如列表)。当传递字典列表时,底层语句执行将使用DBAPI cursor.executemany()
方法。当传递单个字典时,DBAPI cursor.execute()
方法。
execution_options¶ -- 执行选项的可选字典,它将与语句执行关联。此字典可以提供接受的选项的子集 Connection.execution_options()
.
一 Result
对象。
sqlalchemy.future.Connection.
rollback()¶回滚当前正在进行的事务。
如果当前事务已启动,此方法将回滚当前事务。如果没有启动任何事务,则该方法无效。如果事务已启动且连接处于无效状态,则使用此方法清除该事务。
交易开始于 Connection
当第一次执行语句时自动执行,或者 Connection.begin()
方法被调用。
注解
这个 Connection.rollback()
方法仅作用于链接到的主数据库事务 Connection
对象。它不会对从中调用的保存点进行操作 Connection.begin_nested()
方法;若要控制保存点,请调用 NestedTransaction.rollback()
上 NestedTransaction
由 Connection.begin_nested()
方法本身。
sqlalchemy.future.Connection.
scalar(statement, parameters=None, execution_options=None)¶执行SQL语句构造并返回标量对象。
此方法是调用 Result.scalar()
方法调用 Connection.execute()
方法。参数是等效的。
一个标量Python值,表示返回的第一行的第一列。
创建新的 Engine
实例。
传递给的参数 create_engine()
传递给x的基本上是相同的 create_engine()
功能。不同的是,返回的对象是 Engine
它具有API的2.0版本。
连接一个 Pool
和 Dialect
一起提供数据库连接和行为的源。
这是SQLAlchemy 2.0版本 的 Engine
.
安 Engine
对象是使用 create_engine()
功能。
类签名
sqlalchemy.future.Engine.
begin()¶返回A Connection
已开始事务的对象。
这种方法的使用与 Engine.connect()
,通常作为上下文管理器,它将在块结束时自动维护事务的状态,方法是调用 Connection.commit()
当块正常成功时,或 Connection.rollback()
当引发异常时,在向外传播异常之前:
with engine.begin() as connection:
connection.execute(text("insert into table values ('foo')"))
sqlalchemy.future.Engine.
connect()¶返回一个新的 Connection
对象。
这个 Connection
充当Python上下文管理器,因此此方法的典型用法如下:
with engine.connect() as connection:
connection.execute(text("insert into table values ('foo')"))
connection.commit()
在上面,块完成后,连接被“关闭”,其底层DBAPI资源返回到连接池。这还具有回滚任何显式开始或通过autobegin开始的事务的效果,并将发出 ConnectionEvents.rollback()
事件,如果其中一个已启动且仍在进行中。
sqlalchemy.future.Engine.
execute(*arg, **kw)¶执行给定的构造并返回 CursorResult
。
1.4 版后已移除: 这个 Engine.execute()
方法被认为是SQLAlChemy 1.x系列的遗留方法,将在2.0中删除。SQLAlChemy 2.0中的所有语句都由 Connection.execute()
一种方法 Connection
,或在ORM中由 Session.execute()
一种方法 Session
。(有关SQLAlChemy 2.0的背景信息位于: 迁移到Alchemy )
参数与使用的参数相同 Connection.execute()
。
在这里,一个 Connection
是使用 Engine.connect()
方法,以及使用该连接执行的语句。返回者 CursorResult
被标记为使得当 CursorResult
耗尽且其基础游标关闭时, Connection
这里创建的也将被关闭,这允许将其关联的DBAPI连接资源返回到连接池。
sqlalchemy.future.Engine.
has_table(*arg, **kw)¶如果给定后端具有给定名称的表,则返回True。
1.4 版后已移除: 这个 Engine.has_table()
方法已弃用,并将在将来的版本中删除。请参阅 Inspector.has_table()
。
sqlalchemy.future.Engine.
run_callable(*arg, **kw)¶给定一个可调用的对象或函数,执行它,将一个 Connection
作为第一个论点。
1.4 版后已移除: 这个 Engine.run_callable()
方法已弃用,并将在将来的版本中删除。使用 Engine.begin()
取而代之的是上下文管理器。
给定的*args and * *Kwarg在通过后通过 Connection
论点。
此函数与 Connection.run_callable()
,允许函数在运行时使用 Connection
或 Engine
对象,而不需要知道正在处理的是哪一个。
sqlalchemy.future.Engine.
scalar(*arg, **kw)¶执行并返回第一行的第一列。
1.4 版后已移除: 这个 Engine.scalar()
方法被认为是SQLAlChemy 1.x系列的遗留方法,将在2.0中删除。SQLAlChemy 2.0中的所有语句都由 Connection.execute()
一种方法 Connection
,或在ORM中由 Session.execute()
一种方法 Session
; Result.scalar()
方法然后可以用来返回标量结果。(有关SQLAlChemy 2.0的背景信息位于: 迁移到Alchemy )
底层结果/游标在执行后关闭。
sqlalchemy.future.Engine.
table_names(*arg, **kw)¶返回数据库中所有可用表名的列表。
1.4 版后已移除: 这个 Engine.table_names()
方法已弃用,并将在将来的版本中删除。请参阅 Inspector.get_table_names()
。
sqlalchemy.future.Engine.
transaction(*arg, **kw)¶在事务边界内执行给定函数。
1.4 版后已移除: 这个 Engine.transaction()
方法已弃用,并将在将来的版本中删除。使用 Engine.begin()
取而代之的是上下文管理器。
该函数被传递给 Connection
新采购自 Engine.connect()
作为第一个参数,后跟给定的*args and * *Kwargs。
例如:
def do_something(conn, x, y):
conn.execute(text("some statement"), {'x':x, 'y':y})
engine.transaction(do_something, 5, 10)
函数内的操作都是在单个 Transaction
。一旦成功,事务就会提交。如果引发异常,则在传播异常之前回滚事务。
注解
这个 transaction()
方法被Python的使用所取代 with:
语句,该语句可以与 Engine.begin()
::
with engine.begin() as conn:
conn.execute(text("some statement"), {'x':5, 'y':10})
参见
Engine.begin()
-引擎级事务上下文
Connection.transaction()
- connection-level version of
Engine.transaction()
构建新的 Select
使用2。x样式API。
1.4 新版功能: -The select()
函数现在按位置接受列参数。最高层 select()
函数将根据传入参数自动使用1.x或2.x样式的API;使用 select()
从 sqlalchemy.future
模块将强制只使用2.x样式的构造函数。
类似功能也可通过 FromClause.select()
任意方法 FromClause
.
*entities¶ -- 要从中选择的实体。对于核心用法,这通常是一系列 ColumnElement
和/或 FromClause
将构成结果语句的columns子句的对象。对于那些属于 FromClause
(典型地 Table
或 Alias
对象) FromClause.c
提取集合以形成 ColumnElement
物体。此参数也将接受 TextClause
构造,以及ORM映射类。
flambé! the dragon and The Alchemist image designs created and generously donated by Rotem Yaari.
Created using Sphinx 4.2.0.