支持Python异步。包括对Core和ORM使用的支持,使用了异步兼容的方言。
1.4 新版功能.
注解
从SQLAlChemy 1.4.3开始的异步扩展现在可以被认为是 测试级 软件。API细节可能会更改,但是在这一点上,不太可能有重大的向后不兼容更改。
异步扩展至少需要Python 3.6版。这还取决于 greenlet 类库。默认情况下,此依赖项安装在通用计算机平台上,包括:
x86_64 aarch64 ppc64le amd64 win32
对于上述平台, greenlet
为人所知的是提供预置的轮子文件。为了确保 greenlet
依赖项存在于其他平台上,则 [asyncio]
可以按如下方式安装Extra,其中将包括尝试构建和安装 greenlet
::
pip install sqlalchemy[asyncio]
对于核心用途 create_async_engine()
函数创建 AsyncEngine
它提供了传统 Engine
应用程序编程接口。这个 AsyncEngine
提供 AsyncConnection
通过其 AsyncEngine.connect()
和 AsyncEngine.begin()
方法都提供异步上下文管理器。这个 AsyncConnection
然后可以使用 AsyncConnection.execute()
方法传递缓冲区 Result
,或者 AsyncConnection.stream()
方法传递流式服务器端 AsyncResult
::
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
async def async_main():
engine = create_async_engine(
"postgresql+asyncpg://scott:tiger@localhost/test", echo=True,
)
async with engine.begin() as conn:
await conn.run_sync(meta.drop_all)
await conn.run_sync(meta.create_all)
await conn.execute(
t1.insert(), [{"name": "some name 1"}, {"name": "some name 2"}]
)
async with engine.connect() as conn:
# select a Result, which will be delivered with buffered
# results
result = await conn.execute(select(t1).where(t1.c.name == "some name 1"))
print(result.fetchall())
# for AsyncEngine created in function scope, close and
# clean-up pooled connections
await engine.dispose()
asyncio.run(async_main())
上面, AsyncConnection.run_sync()
方法可用于调用特殊的DDL函数,例如 MetaData.create_all()
那不包括一个等待的钩子。
小技巧
建议您调用 AsyncEngine.dispose()
方法使用 await
在使用 AsyncEngine
对象,该对象将脱离上下文并被垃圾回收,如 async_main
函数。这确保由连接池保持打开的任何连接将被正确地放置在可等待的上下文中。与使用阻塞IO时不同,SQLAlChemy不能在如下方法中正确处理这些连接 __del__
或弱ref终结器,因为没有机会调用 await
。当引擎落入范围之外时,如果不显式处置引擎,可能会导致向标准输出发出类似于该表单的警告 RuntimeError: Event loop is closed
在垃圾收集中。
这个 AsyncConnection
还具有通过 AsyncConnection.stream()
方法返回 AsyncResult
对象。此结果对象使用服务器端游标并提供异步/等待API,例如异步迭代器:
async with engine.connect() as conn:
async_result = await conn.stream(select(t1))
async for row in async_result:
print("row: %s" % (row, ))
使用 2.0 style 查询时, AsyncSession
类提供完整的ORM功能。在默认使用模式下,必须特别注意避免 lazy loading 或其他涉及ORM关系和列属性的过期属性访问;下一节 使用AsyncSession时防止隐式IO 详细说明了这一点。下面的示例说明了一个完整的示例,包括映射器和会话配置:
import asyncio
from sqlalchemy import Column
from sqlalchemy import DateTime
from sqlalchemy import ForeignKey
from sqlalchemy import func
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy.future import select
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm import selectinload
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class A(Base):
__tablename__ = "a"
id = Column(Integer, primary_key=True)
data = Column(String)
create_date = Column(DateTime, server_default=func.now())
bs = relationship("B")
# required in order to access columns with server defaults
# or SQL expression defaults, subsequent to a flush, without
# triggering an expired load
__mapper_args__ = {"eager_defaults": True}
class B(Base):
__tablename__ = "b"
id = Column(Integer, primary_key=True)
a_id = Column(ForeignKey("a.id"))
data = Column(String)
async def async_main():
engine = create_async_engine(
"postgresql+asyncpg://scott:tiger@localhost/test",
echo=True,
)
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.drop_all)
await conn.run_sync(Base.metadata.create_all)
# expire_on_commit=False will prevent attributes from being expired
# after commit.
async_session = sessionmaker(
engine, expire_on_commit=False, class_=AsyncSession
)
async with async_session() as session:
async with session.begin():
session.add_all(
[
A(bs=[B(), B()], data="a1"),
A(bs=[B()], data="a2"),
A(bs=[B(), B()], data="a3"),
]
)
stmt = select(A).options(selectinload(A.bs))
result = await session.execute(stmt)
for a1 in result.scalars():
print(a1)
print(f"created at: {a1.create_date}")
for b1 in a1.bs:
print(b1)
result = await session.execute(select(A).order_by(A.id))
a1 = result.scalars().first()
a1.data = "new data"
await session.commit()
# access attribute subsequent to commit; this is what
# expire_on_commit=False allows
print(a1.data)
# for AsyncEngine created in function scope, close and
# clean-up pooled connections
await engine.dispose()
asyncio.run(async_main())
在上面的示例中, AsyncSession
使用可选的 sessionmaker
帮助器,并与 AsyncEngine
针对特定的数据库URL。然后在Python异步上下文管理器中使用它(即 async with:
语句),以便它在挡路结束时自动关闭;这等效于调用 AsyncSession.close()
方法。
注解
AsyncSession
使用SQLAlChemy的未来模式,该模式有几个潜在的突破性更改。其中一个更改是新的默认行为 cascade_backrefs
是 False
,这可能会影响将相关对象保存到数据库的方式。
使用传统的异步方式,应用程序需要避免可能发生按属性访问IO的任何点。在上述情况下,我们采取了以下措施来防止这种情况的发生:
这个 selectinload()
紧急装载机的使用是为了紧急装载 A.bs
对象范围内的集合 await session.execute()
电话::
stmt = select(A).options(selectinload(A.bs))
如果“lazyload”的默认加载程序策略保持不变,则 A.bs
属性将引发异步CIO异常。有多种ORM加载器选项可用,这些选项可以在默认映射级别配置,也可以在每个查询的基础上使用,文档为 关系加载技术 。
这个 AsyncSession
是使用以下方式配置的 Session.expire_on_commit
设置为false,以便我们可以在调用 AsyncSession.commit()
,如我们访问属性::的末尾那行所示
# create AsyncSession with expire_on_commit=False
async_session = AsyncSession(engine, expire_on_commit=False)
# sessionmaker version
async_session = sessionmaker(
engine, expire_on_commit=False, class_=AsyncSession
)
async with async_session() as session:
result = await session.execute(select(A).order_by(A.id))
a1 = result.scalars().first()
# commit would normally expire all attributes
await session.commit()
# access attribute subsequent to commit; this is what
# expire_on_commit=False allows
print(a1.data)
这个 Column.server_default
上的值。 created_at
默认情况下,插入后不会刷新列;相反,它通常是 expired so that it can be loaded when needed 。类似的行为也适用于列,其中 Column.default
参数分配给SQL表达式对象。若要使用asyncio访问此值,必须在刷新过程中刷新该值,这可以通过设置 mapper.eager_defaults
映射上的参数::
class A(Base):
# ...
# column with a server_default, or SQL expression default
create_date = Column(DateTime, server_default=func.now())
# add this so that it can be accessed
__mapper_args__ = {"eager_defaults": True}
其他准则包括:
像这样的方法 AsyncSession.expire()
应该避免,而是有利于 AsyncSession.refresh()
避免使用 all
层叠选项记录在 级联 支持明确列出所需的级联功能。这个 all
级联选项除其他选项外,还暗示 刷新期满 设置,这意味着 AsyncSession.refresh()
方法将使相关对象的属性过期,但不一定刷新这些相关对象(假设没有在 relationship()
,使其处于过期状态。将来的版本可能会引入在调用时指示急切加载程序选项的功能 Session.refresh()
和/或 AsyncSession.refresh()
。
应采用适当的装载机选项 deferred()
列(如果使用的话),以及 relationship()
构造如上所述。看见 延迟列加载 有关延迟列加载的背景信息,请参阅。
中描述的“动态”关系加载器策略 动态关系加载器 默认情况下与异步方法不兼容。方法中调用时,才能直接使用它。 AsyncSession.run_sync()
有关方法的说明,请参阅 在Asyncio下运行同步方法和函数 ,或使用其 .statement
属性以获取普通选择::
user = await session.get(User, 42)
addresses = (await session.scalars(user.addresses.statement)).all()
stmt = user.addresses.statement.where(
Address.email_address.startswith("patrick")
)
addresses_filter = (await session.scalars(stmt)).all()
Deep Alchemy
这种方法实质上公开了SQLAlchemy首先能够提供asyncio接口的机制。虽然这样做没有技术问题,但总体而言,这种方法可能会被认为是“有争议的”,因为它违背了asyncio编程模型的一些中心思想,即任何可能导致IO被调用的编程语句 must 有一个 await
调用,以免程序没有显式地清除IO可能发生的每一行。这种方法并没有改变这种一般的想法,只是它允许一系列同步IO指令在一个函数调用的范围内不受此规则的约束,基本上被捆绑成一个单独的等待指令。
作为在异步事件循环中集成传统SQLAlchemy“延迟加载”的替代方法,一个 可选择的 方法称为 AsyncSession.run_sync()
它将在greenlet内部运行任何Python函数,传统的同步编程概念将被转换为使用 await
当它们到达数据库驱动程序时。这里的一个假设方法是一个面向异步的应用程序,它可以将与数据库相关的方法打包成使用调用的函数 AsyncSession.run_sync()
.
如果我们不使用 selectinload()
对于 A.bs
集合中,我们可以在单独的函数中完成对这些属性访问的处理:
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy.ext.asyncio import AsyncSession
def fetch_and_update_objects(session):
"""run traditional sync-style ORM code in a function that will be
invoked within an awaitable.
"""
# the session object here is a traditional ORM Session.
# all features are available here including legacy Query use.
stmt = select(A)
result = session.execute(stmt)
for a1 in result.scalars():
print(a1)
# lazy loads
for b1 in a1.bs:
print(b1)
# legacy Query use
a1 = session.query(A).order_by(A.id).first()
a1.data = "new data"
async def async_main():
engine = create_async_engine(
"postgresql+asyncpg://scott:tiger@localhost/test", echo=True,
)
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.drop_all)
await conn.run_sync(Base.metadata.create_all)
async with AsyncSession(engine) as session:
async with session.begin():
session.add_all(
[
A(bs=[B(), B()], data="a1"),
A(bs=[B()], data="a2"),
A(bs=[B(), B()], data="a3"),
]
)
await session.run_sync(fetch_and_update_objects)
await session.commit()
# for AsyncEngine created in function scope, close and
# clean-up pooled connections
await engine.dispose()
asyncio.run(async_main())
上述在“sync”运行器中运行某些函数的方法与在基于事件的编程库(如 gevent
. 区别如下:
与使用时不同 gevent
,我们可以继续使用标准Python异步事件循环或任何自定义事件循环,而无需集成到 gevent
事件循环。
根本不存在“恶作剧”。上面的例子使用了一个真正的异步驱动程序,底层的SQLAlchemy连接池也使用了Python内置的 asyncio.Queue
用于池连接。
该程序可以在异步/等待代码和包含的使用同步代码的函数之间自由切换,几乎没有性能损失。没有“线程执行器”或任何其他等待器或同步正在使用。
底层网络驱动程序也使用纯Python异步概念,没有第三方网络库 gevent
和 eventlet
提供正在使用中。
SQL炼金术 event system 不是由异步扩展直接公开的,这意味着还没有“异步”版本的SQLAlChemy事件处理程序。
然而,由于异步扩展围绕着通常的同步SQLAlChemy API,常规的“同步”样式的事件处理程序是免费可用的,就像不使用异步时一样。
如下所述,当前有两种策略来注册给定的异步面向异步API的事件:
可以在实例级别注册事件(例如,特定的 AsyncEngine
实例),方法是将事件与 sync
引用代理对象的属性。例如,要注册 PoolEvents.connect()
事件针对 AsyncEngine
实例,请使用其 AsyncEngine.sync_engine
属性作为目标。目标包括:
在类级别注册事件,以同一类型的所有实例为目标(例如All AsyncSession
实例),则使用相应的同步样式类。例如,要注册 SessionEvents.before_commit()
事件针对 AsyncSession
类,请使用 Session
类作为目标。
当在异步上下文中的事件处理程序中工作时, Connection
继续以通常的“同步”方式工作,而不需要 await
或 async
当异步数据库适配器最终接收到消息时,调用风格被透明地调整回异步调用风格。对于传递DBAPI级别连接的事件,例如 PoolEvents.connect()
,则该对象是一个 pep-249 兼容的“连接”对象,它将使同步风格的调用适应于异步驱动程序。
与面向异步的API构造相关联的同步样式事件处理程序的一些示例如下所示:
import asyncio
from sqlalchemy import text
from sqlalchemy.engine import Engine
from sqlalchemy import event
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy.orm import Session
## Core events ##
engine = create_async_engine(
"postgresql+asyncpg://scott:tiger@localhost:5432/test"
)
# connect event on instance of Engine
@event.listens_for(engine.sync_engine, "connect")
def my_on_connect(dbapi_con, connection_record):
print("New DBAPI connection:", dbapi_con)
cursor = dbapi_con.cursor()
# sync style API use for adapted DBAPI connection / cursor
cursor.execute("select 'execute from event'")
print(cursor.fetchone()[0])
# before_execute event on all Engine instances
@event.listens_for(Engine, "before_execute")
def my_before_execute(
conn, clauseelement, multiparams, params, execution_options
):
print("before execute!")
## ORM events ##
session = AsyncSession(engine)
# before_commit event on instance of Session
@event.listens_for(session.sync_session, "before_commit")
def my_before_commit(session):
print("before commit!")
# sync style API use on Session
connection = session.connection()
# sync style API use on Connection
result = connection.execute(text("select 'execute from event'"))
print(result.first())
# after_commit event on all Session instances
@event.listens_for(Session, "after_commit")
def my_after_commit(session):
print("after commit!")
async def go():
await session.execute(text("select 1"))
await session.commit()
await session.close()
await engine.dispose()
asyncio.run(go())
上面的示例打印如下行的内容::
New DBAPI connection: <AdaptedConnection <asyncpg.connection.Connection ...>>
execute from event
before execute!
before commit!
execute from event
after commit!
异步与事件,两个对立面
SQLAlChemy事件本质上是在 室内 特定SQLAlChemy进程的;也就是说,事件总是发生 之后 终端用户代码已经调用了一些特定的SQLAlChemy API,并且 在此之前 API其他一些内部方面也会发生。
将其与Asyncio扩展的体系结构进行对比,后者发生在 外部 SQLAlChemy通常从终端用户API到DBAPI函数的流程。
消息传递流可以可视化如下:
SQLAlchemy SQLAlchemy SQLAlchemy SQLAlchemy plain
asyncio asyncio ORM/Core asyncio asyncio
(public (internal) (internal)
facing)
-------------|------------|------------------------|-----------|------------
asyncio API | | | |
call -> | | | |
| -> -> | | -> -> |
|~~~~~~~~~~~~| sync API call -> |~~~~~~~~~~~|
| asyncio | event hooks -> | sync |
| to | invoke action -> | to |
| sync | event hooks -> | asyncio |
| (greenlet) | dialect -> | (leave |
|~~~~~~~~~~~~| event hooks -> | greenlet) |
| -> -> | sync adapted |~~~~~~~~~~~|
| | DBAPI -> | -> -> | asyncio
| | | | driver -> database
其中,在结果以相反方向通过同一链传播之前,API调用始终以异步方式开始,流经同步API,并以异步方式结束。在这两者之间,消息首先被改编成同步样式的API使用,然后再改回异步样式。然后,事件挂钩本质上发生在“同步式API使用”的中间。由此可以得出,在事件挂钩内呈现的API发生在异步API请求已被调整为同步的进程内,并且到数据库API的输出消息将被透明地转换为异步。
使用多个事件循环的应用程序(例如,通过将异步与多线程相结合)不应共享相同的事件循环 AsyncEngine
在使用默认池实现时使用不同的事件循环。
如果一个 AsyncEngine
从一个事件循环传递到另一个事件循环,则该方法 AsyncEngine.dispose()
在新的事件循环中重新使用它之前应该调用。如果不这样做,可能会导致 RuntimeError
沿着……的路线 Task <Task pending ...> got Future attached to a different loop
如果必须在不同循环之间共享同一引擎,则应将其配置为使用 NullPool
,防止引擎多次使用任何连接::
from sqlalchemy.pool import NullPool
engine = create_async_engine(
"postgresql+asyncpg://user:pass@host/dbname", poolclass=NullPool
)
的用法 async_scoped_session
在很大程度上类似于 scoped_session
。但是,由于异步CIO上下文中没有“线程本地”概念,因此必须向构造函数提供“scope efunc”参数::
from asyncio import current_task
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.asyncio import async_scoped_session
from sqlalchemy.ext.asyncio import AsyncSession
async_session_factory = sessionmaker(some_async_engine, class_=_AsyncSession)
AsyncSession = async_scoped_session(async_session_factory, scopefunc=current_task)
some_async_session = AsyncSession()
async_scoped_session
还包括 代理行为 与……相似 scoped_session
,这意味着它可以被视为 AsyncSession
直接,记住通常的 await
关键字是必需的,包括 async_scoped_session.remove()
方法:
async def some_function(some_async_session, some_object):
# use the AsyncSession directly
some_async_session.add(some_object)
# use the AsyncSession via the context-local proxy
await AsyncSession.commit()
# "remove" the current proxied AsyncSession for the local context
await AsyncSession.remove()
1.4.19 新版功能.
SQLAlChemy还没有提供异步版本的 Inspector
(在以下位置介绍 带检查员的细颗粒反射 ),但是现有接口可以通过利用 AsyncConnection.run_sync()
一种方法 AsyncConnection
::
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import inspect
engine = create_async_engine(
"postgresql+asyncpg://scott:tiger@localhost/test"
)
def use_inspector(conn):
inspector = inspect(conn)
# use the inspector
print(inspector.get_view_names())
# return any value to the caller
return inspector.get_table_names()
async def async_main():
async with engine.connect() as conn:
tables = await conn.run_sync(use_inspector)
asyncio.run(async_main())
Object Name | Description |
---|---|
的异步代理 |
|
的异步代理 |
|
的异步代理 |
|
create_async_engine(*arg, **kw) |
创建新的异步引擎实例。 |
创建新的异步引擎实例。
传递给的参数 create_async_engine()
与传递给 create_engine()
功能。指定的方言必须是异步兼容方言,例如 异步PG .
1.4 新版功能.
的异步代理 Engine
.
AsyncEngine
是使用 create_async_engine()
功能:
from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine("postgresql+asyncpg://user:pass@host/dbname")
1.4 新版功能.
类签名
class sqlalchemy.ext.asyncio.AsyncEngine
(sqlalchemy.ext.asyncio.base.ProxyComparable
, sqlalchemy.ext.asyncio.AsyncConnectable
)
sqlalchemy.ext.asyncio.AsyncEngine.
begin()¶返回一个上下文管理器,当输入该上下文管理器时 AsyncConnection
用一个 AsyncTransaction
建立。
例如。::
async with async_engine.begin() as conn:
await conn.execute(
text("insert into table (x, y, z) values (1, 2, 3)")
)
await conn.execute(text("my_special_procedure(5)"))
sqlalchemy.ext.asyncio.AsyncEngine.
clear_compiled_cache()¶清除与方言关联的已编译缓存。
代表 Engine
代表 AsyncEngine
班级。
这适用 only 到通过建立的内置缓存 create_engine.query_cache_size
参数。它不会影响通过 Connection.execution_options.query_cache
参数。
1.4 新版功能.
sqlalchemy.ext.asyncio.AsyncEngine.
connect()¶返回一 AsyncConnection
对象。
这个 AsyncConnection
当作为异步上下文管理器输入时,将从基础连接池获取数据库连接:
async with async_engine.connect() as conn:
result = await conn.execute(select(user_table))
这个 AsyncConnection
也可以通过调用上下文管理器的 AsyncConnection.start()
方法。
sqlalchemy.ext.asyncio.AsyncEngine.
dispose()¶释放此使用的连接池 AsyncEngine
.
这将关闭所有 当前已签入 . 请参阅文档以了解 Engine.dispose()
进一步说明的方法。
参见
Engine.dispose()
sqlalchemy.ext.asyncio.AsyncEngine.
execution_options(**opt)¶返回一个新的 AsyncEngine
这将提供 AsyncConnection
具有给定执行选项的对象。
代理自 Engine.execution_options()
. 有关详细信息,请参见该方法。
sqlalchemy.ext.asyncio.AsyncEngine.
get_execution_options()¶获取将在执行期间生效的非SQL选项。
代表 Engine
代表 AsyncEngine
班级。
sqlalchemy.ext.asyncio.AsyncEngine.
raw_connection()¶从连接池返回“原始”DBAPI连接。
sqlalchemy.ext.asyncio.AsyncEngine.
sync_engine¶对同步样式的引用 Engine
这 AsyncEngine
代理请求指向。
此实例可以用作事件目标。
参见
sqlalchemy.ext.asyncio.AsyncEngine.
update_execution_options(**opt)¶更新此的默认执行选项字典 Engine
.
代表 Engine
代表 AsyncEngine
班级。
中给定的键/值 * *opt被添加到将用于所有连接的默认执行选项中。本词典的初始内容可通过 execution_options
参数到 create_engine()
.
的异步代理 Connection
.
AsyncConnection
是使用 AsyncEngine.connect()
方法 AsyncEngine
::
from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine("postgresql+asyncpg://user:pass@host/dbname")
async with engine.connect() as conn:
result = await conn.execute(select(table))
1.4 新版功能.
类签名
class sqlalchemy.ext.asyncio.AsyncConnection
(sqlalchemy.ext.asyncio.base.ProxyComparable
, sqlalchemy.ext.asyncio.base.StartableContext
, sqlalchemy.ext.asyncio.AsyncConnectable
)
sqlalchemy.ext.asyncio.AsyncConnection.
begin()¶在自动注册之前开始事务。
sqlalchemy.ext.asyncio.AsyncConnection.
begin_nested()¶开始嵌套事务并返回事务句柄。
sqlalchemy.ext.asyncio.AsyncConnection.
close()¶关闭此 AsyncConnection
.
如果有事务,这也有回滚事务的效果。
sqlalchemy.ext.asyncio.AsyncConnection.
commit()¶提交当前正在进行的事务。
此方法提交当前事务(如果已启动)。如果没有启动任何事务,则假定连接处于非无效状态,则该方法无效。
交易开始于 Connection
当第一次执行语句时自动执行,或者 Connection.begin()
方法被调用。
sqlalchemy.ext.asyncio.AsyncConnection.
connection¶没有为异步实现;调用 AsyncConnection.get_raw_connection()
.
sqlalchemy.ext.asyncio.AsyncConnection.
exec_driver_sql(statement, parameters=None, execution_options={})¶执行驱动程序级别的SQL字符串并返回缓冲区 Result
.
sqlalchemy.ext.asyncio.AsyncConnection.
execute(statement, parameters=None, execution_options={})¶执行SQL语句构造并返回缓冲区 Result
.
object¶ --
要执行的语句。这始终是一个同时位于 ClauseElement
和 Executable
层次结构,包括:
DDL
and objects which inherit from
DDLElement
parameters¶ -- 将绑定到语句中的参数。这可以是参数名到值的字典,也可以是字典的可变序列(例如列表)。当传递字典列表时,底层语句执行将使用DBAPI cursor.executemany()
方法。当传递单个字典时,DBAPI cursor.execute()
方法。
execution_options¶ -- 执行选项的可选字典,它将与语句执行关联。此字典可以提供接受的选项的子集 Connection.execution_options()
.
一 Result
对象。
sqlalchemy.ext.asyncio.AsyncConnection.
execution_options(**opt)¶为在执行期间生效的连接设置非SQL选项。
这个返回这个 AsyncConnection
对象添加了新选项。
见 Connection.execution_options()
有关此方法的详细信息。
sqlalchemy.ext.asyncio.AsyncConnection.
get_nested_transaction()¶返回一个 AsyncTransaction
表示当前嵌套(保存点)事务(如果有)。
这利用了底层同步连接的 Connection.get_nested_transaction()
方法来获取当前 Transaction
,然后在新的 AsyncTransaction
对象。
1.4.0b2 新版功能.
sqlalchemy.ext.asyncio.AsyncConnection.
get_raw_connection()¶返回此使用的池DBAPI级别连接 AsyncConnection
.
这是SQLAlChemy连接池代理连接,然后该连接具有属性 _ConnectionFairy.driver_connection
这指的是实际的驱动程序连接。它的 _ConnectionFairy.dbapi_connection
而是指一个 AdaptedConnection
实例,该实例使驱动程序连接适应DBAPI协议。
sqlalchemy.ext.asyncio.AsyncConnection.
get_transaction()¶返回一个 AsyncTransaction
表示当前事务(如果有)的。
这利用了底层同步连接的 Connection.get_transaction()
方法来获取当前 Transaction
,然后在新的 AsyncTransaction
对象。
1.4.0b2 新版功能.
sqlalchemy.ext.asyncio.AsyncConnection.
in_nested_transaction()¶如果事务正在进行,则返回True。
1.4.0b2 新版功能.
sqlalchemy.ext.asyncio.AsyncConnection.
in_transaction()¶如果事务正在进行,则返回True。
1.4.0b2 新版功能.
sqlalchemy.ext.asyncio.AsyncConnection.
info¶返回 Connection.info
基础数据库的字典 Connection
。
对于与数据库连接相关联的用户定义状态,此字典可以自由写入。
此属性仅在以下情况下可用 AsyncConnection
当前已连接。如果 AsyncConnection.closed
属性为 True
,则访问此属性将引发 ResourceClosedError
。
1.4.0b2 新版功能.
sqlalchemy.ext.asyncio.AsyncConnection.
invalidate(exception=None)¶使与此关联的基础DBAPI连接失效 Connection
.
见方法 Connection.invalidate()
关于这个方法的全部细节。
sqlalchemy.ext.asyncio.AsyncConnection.
rollback()¶回滚当前正在进行的事务。
如果当前事务已启动,此方法将回滚当前事务。如果没有启动任何事务,则该方法无效。如果事务已启动且连接处于无效状态,则使用此方法清除该事务。
交易开始于 Connection
当第一次执行语句时自动执行,或者 Connection.begin()
方法被调用。
sqlalchemy.ext.asyncio.AsyncConnection.
run_sync(fn, *arg, **kw)¶调用给定的sync callable passing self作为第一个参数。
此方法通过在一个特殊检测的greenlet中运行给定的callable来维护从到数据库连接的asyncio事件循环。
例如。::
with async_engine.begin() as conn:
await conn.run_sync(metadata.create_all)
注解
提供的Callable在异步事件循环内内联调用,并将在传统IO调用上挡路。此可调用对象中的IO应该只调用SQLAlChemy的异步数据库API,这些API将适当地适应greenlet上下文。
sqlalchemy.ext.asyncio.AsyncConnection.
scalar(statement, parameters=None, execution_options={})¶执行SQL语句构造并返回标量对象。
此方法是调用 Result.scalar()
方法调用 Connection.execute()
方法。参数是等效的。
一个标量Python值,表示返回的第一行的第一列。
sqlalchemy.ext.asyncio.AsyncConnection.
scalars(statement, parameters=None, execution_options={})¶执行SQL语句构造并返回标量对象。
此方法是调用 Result.scalars()
在调用 Connection.execute()
方法。参数是等效的。
一个 ScalarResult
对象。
1.4.24 新版功能.
sqlalchemy.ext.asyncio.AsyncConnection.
start(is_ctxmanager=False)¶开始吧 AsyncConnection
对象的上下文在使用Python之外 with:
块。
sqlalchemy.ext.asyncio.AsyncConnection.
stream(statement, parameters=None, execution_options={})¶执行语句并返回流 AsyncResult
对象。
sqlalchemy.ext.asyncio.AsyncConnection.
stream_scalars(statement, parameters=None, execution_options={})¶执行SQL语句并返回流式标量结果对象。
此方法是调用 AsyncResult.scalars()
在调用 Connection.stream()
方法。参数是等效的。
一个 AsyncScalarResult
对象。
1.4.24 新版功能.
sqlalchemy.ext.asyncio.AsyncConnection.
sync_connection¶对同步样式的引用 Connection
这 AsyncConnection
代理请求指向。
此实例可以用作事件目标。
参见
sqlalchemy.ext.asyncio.AsyncConnection.
sync_engine¶对同步样式的引用 Engine
这 AsyncConnection
通过其基础结构与 Connection
。
此实例可以用作事件目标。
参见
的异步代理 Transaction
.
类签名
class sqlalchemy.ext.asyncio.AsyncTransaction
(sqlalchemy.ext.asyncio.base.ProxyComparable
, sqlalchemy.ext.asyncio.base.StartableContext
)
sqlalchemy.ext.asyncio.AsyncTransaction.
close()¶关闭此 Transaction
.
如果此事务是begin/commit嵌套中的基本事务,则该事务将回滚()。否则,方法返回。
这用于取消事务,而不影响封闭事务的范围。
sqlalchemy.ext.asyncio.AsyncTransaction.
commit()¶提交此 Transaction
.
sqlalchemy.ext.asyncio.AsyncTransaction.
rollback()¶回滚这个 Transaction
.
sqlalchemy.ext.asyncio.AsyncTransaction.
start(is_ctxmanager=False)¶开始吧 AsyncTransaction
对象的上下文在使用Python之外 with:
块。
这个 AsyncResult
对象是 Result
对象。只有在使用 AsyncConnection.stream()
或 AsyncSession.stream()
方法,返回位于活动数据库游标顶部的结果对象。
Object Name | Description |
---|---|
包装纸 |
|
一个异步包装器 |
|
包装纸 |
一个异步包装器 Result
对象。
这个 AsyncResult
仅适用于使用服务器端游标的语句执行。它只从 AsyncConnection.stream()
和 AsyncSession.stream()
方法。
注解
就像现在的情况一样 Result
,此对象用于由返回的ORM结果 AsyncSession.execute()
,它可以单独生成ORM映射对象的实例,也可以在类似元组的行内生成ORM映射对象的实例。请注意,这些结果对象不会像传统的那样自动消除实例或行的重复数据 Query
对象。对于实例或行的Python内重复数据消除,请使用 AsyncResult.unique()
修饰符方法。
1.4 新版功能.
类签名
class sqlalchemy.ext.asyncio.AsyncResult
(sqlalchemy.ext.asyncio.AsyncCommon
)
sqlalchemy.ext.asyncio.AsyncResult.
all()¶返回列表中的所有行。
调用后关闭结果集。随后的调用将返回一个空列表。
一览表 Row
物体。
sqlalchemy.ext.asyncio.AsyncResult.
columns(*col_expressions)¶建立每行中应返回的列。
参照 Result.columns()
在同步SQLAlchemy API中获取完整的行为描述。
sqlalchemy.ext.asyncio.AsyncResult.
fetchmany(size=None)¶取许多行。
当所有行都用完时,返回一个空列表。
与AlchemY.1.1兼容。
要获取组中的行,请使用 AsyncResult.partitions()
方法。
一览表 Row
物体。
sqlalchemy.ext.asyncio.AsyncResult.
fetchone()¶取一行。
当所有行都用完时,返回None。
与AlchemY.1.1兼容。
要只获取结果的第一行,请使用 Result.first()
方法。要遍历所有行,请迭代 Result
直接对象。
一 Row
对象(如果未应用筛选器),或者如果没有保留行,则为无。
sqlalchemy.ext.asyncio.AsyncResult.
first()¶获取第一行,如果没有行,则不获取。
关闭结果集并丢弃其余行。
注解
此方法返回一个 row ,例如,默认情况下是元组。要只返回一个标量值,即第一行的第一列,请使用 AsyncResult.scalar()
方法或组合 AsyncResult.scalars()
和 AsyncResult.first()
.
一 Row
对象,如果没有行保留,则无。
sqlalchemy.ext.asyncio.AsyncResult.
freeze()¶返回一个可调用的对象,该对象将生成此 AsyncResult
当被调用时。
返回的可调用对象是 FrozenResult
.
这用于结果集缓存。当结果尚未使用时,必须对其调用该方法,而调用该方法将完全消耗结果。当 FrozenResult
从缓存中检索时,可以多次调用它,其中它将生成一个新的 Result
对象每次针对其存储的行集。
参见
重新执行语句 -ORM中实现结果集缓存的示例用法。
sqlalchemy.ext.asyncio.AsyncResult.
keys()¶返回 Result.keys()
从底层收集 Result
.
sqlalchemy.ext.asyncio.AsyncResult.
mappings()¶对返回的行应用映射筛选器,返回 AsyncMappingResult
.
应用此筛选器时,获取行将返回 RowMapping
对象而不是 Row
物体。
参照 Result.mappings()
在同步SQLAlchemy API中获取完整的行为描述。
一个新的 AsyncMappingResult
筛选引用基础 Result
对象。
sqlalchemy.ext.asyncio.AsyncResult.
merge(*others)¶合并此 AsyncResult
与其他兼容的结果对象。
返回的对象是的实例 MergedResult
给定的迭代器将由以下对象组成。
新结果将使用此结果对象中的元数据。后续的结果对象必须针对相同的结果/游标元数据集,否则行为未定义。
sqlalchemy.ext.asyncio.AsyncResult.
one()¶只返回一行或引发异常。
加薪 NoResultFound
如果结果没有返回行,或者 MultipleResultsFound
如果返回多行。
注解
此方法返回一个 row ,例如,默认情况下是元组。要只返回一个标量值,即第一行的第一列,请使用 AsyncResult.scalar_one()
方法或组合 AsyncResult.scalars()
和 AsyncResult.one()
.
1.4 新版功能.
第一 Row
.
sqlalchemy.ext.asyncio.AsyncResult.
one_or_none()¶最多返回一个结果或引发异常。
返回 None
如果结果没有行。加薪 MultipleResultsFound
如果返回多行。
1.4 新版功能.
第一 Row
如果没有行可用,则无。
sqlalchemy.ext.asyncio.AsyncResult.
partitions(size=None)¶迭代给定大小的行的子列表。
返回异步迭代器::
async def scroll_results(connection):
result = await connection.stream(select(users_table))
async for partition in result.partitions(100):
print("list of rows: %s" % partition)
sqlalchemy.ext.asyncio.AsyncResult.
scalar()¶获取第一行的第一列,并关闭结果集。
如果没有要获取的行,则返回None。
不执行验证来测试是否还有其他行。
调用此方法后,对象将完全关闭,例如 CursorResult.close()
将调用方法。
Python标量值,如果没有行保留,则为无。
sqlalchemy.ext.asyncio.AsyncResult.
scalar_one()¶只返回一个标量结果或引发异常。
这相当于调用 AsyncResult.scalars()
然后 AsyncResult.one()
。
sqlalchemy.ext.asyncio.AsyncResult.
scalar_one_or_none()¶只返回一个或不返回标量结果。
这相当于调用 AsyncResult.scalars()
然后 AsyncResult.one_or_none()
。
sqlalchemy.ext.asyncio.AsyncResult.
scalars(index=0)¶返回一 AsyncScalarResult
将返回单个元素而不是 Row
物体。
参照 Result.scalars()
在同步SQLAlchemy API中获取完整的行为描述。
index¶ -- 整数或行键,指示要从每行提取的列,默认为 0
表示第一列。
一个新的 AsyncScalarResult
引用此的筛选对象 AsyncResult
对象。
sqlalchemy.ext.asyncio.AsyncResult.
unique(strategy=None)¶对此返回的对象应用唯一筛选 AsyncResult
.
参照 Result.unique()
在同步SQLAlchemy API中获取完整的行为描述。
包装纸 AsyncResult
返回标量值而不是 Row
价值观。
这个 AsyncScalarResult
对象是通过调用 AsyncResult.scalars()
方法。
参考 ScalarResult
对象,以获取完整的行为描述。
1.4 新版功能.
类签名
class sqlalchemy.ext.asyncio.AsyncScalarResult
(sqlalchemy.ext.asyncio.AsyncCommon
)
sqlalchemy.ext.asyncio.AsyncScalarResult.
all()¶返回列表中的所有标量值。
相当于 AsyncResult.all()
除了标量值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncScalarResult.
fetchall()¶的同义词 AsyncScalarResult.all()
方法。
sqlalchemy.ext.asyncio.AsyncScalarResult.
fetchmany(size=None)¶获取许多对象。
相当于 AsyncResult.fetchmany()
除了标量值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncScalarResult.
first()¶获取第一个对象,如果没有对象,则不获取。
相当于 AsyncResult.first()
除了标量值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncScalarResult.
one()¶只返回一个对象或引发异常。
相当于 AsyncResult.one()
除了标量值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncScalarResult.
one_or_none()¶最多返回一个对象或引发异常。
相当于 AsyncResult.one_or_none()
除了标量值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncScalarResult.
partitions(size=None)¶迭代给定大小的元素的子列表。
相当于 AsyncResult.partitions()
除了标量值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncScalarResult.
unique(strategy=None)¶对此返回的对象应用唯一筛选 AsyncScalarResult
.
见 AsyncResult.unique()
有关用法的详细信息。
包装纸 AsyncResult
返回字典值而不是 Row
价值观。
这个 AsyncMappingResult
对象是通过调用 AsyncResult.mappings()
方法。
参考 MappingResult
对象,以获取完整的行为描述。
1.4 新版功能.
类签名
class sqlalchemy.ext.asyncio.AsyncMappingResult
(sqlalchemy.ext.asyncio.AsyncCommon
)
sqlalchemy.ext.asyncio.AsyncMappingResult.
all()¶返回列表中的所有标量值。
相当于 AsyncResult.all()
除了映射值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncMappingResult.
columns(*col_expressions)¶建立每行中应返回的列。
sqlalchemy.ext.asyncio.AsyncMappingResult.
fetchall()¶的同义词 AsyncMappingResult.all()
方法。
sqlalchemy.ext.asyncio.AsyncMappingResult.
fetchmany(size=None)¶获取许多对象。
相当于 AsyncResult.fetchmany()
除了映射值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncMappingResult.
fetchone()¶取一个对象。
相当于 AsyncResult.fetchone()
除了映射值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncMappingResult.
first()¶获取第一个对象,如果没有对象,则不获取。
相当于 AsyncResult.first()
除了映射值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncMappingResult.
keys()¶返回一个iterable视图,该视图生成由每个键表示的字符串键 Row
.
还可以使用Python测试视图的密钥包含 in
运算符,它将测试视图中表示的字符串键以及可选键(如列对象)。
在 1.4 版更改: 返回键视图对象而不是纯列表。
sqlalchemy.ext.asyncio.AsyncMappingResult.
one()¶只返回一个对象或引发异常。
相当于 AsyncResult.one()
除了映射值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncMappingResult.
one_or_none()¶最多返回一个对象或引发异常。
相当于 AsyncResult.one_or_none()
除了映射值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncMappingResult.
partitions(size=None)¶迭代给定大小的元素的子列表。
相当于 AsyncResult.partitions()
除了映射值,而不是 Row
对象,则返回。
sqlalchemy.ext.asyncio.AsyncMappingResult.
unique(strategy=None)¶对此返回的对象应用唯一筛选 AsyncMappingResult
.
见 AsyncResult.unique()
有关用法的详细信息。
Object Name | Description |
---|---|
async_object_session(instance) |
返回 |
提供范围内的管理 |
|
async_session(session) |
返回 |
的异步版本 |
|
ORM的包装 |
返回 AsyncSession
给定实例所属的。
此函数利用sync-api函数 object_session
检索 Session
它引用给定的实例,并从那里将其链接到原始实例 AsyncSession
。
如果 AsyncSession
已被垃圾回收,则返回值为 None
。
此功能也可以从 InstanceState.async_session
访问者。
instance¶ -- ORM映射的实例
一个 AsyncSession
对象,或 None
。
1.4.18 新版功能.
返回 AsyncSession
它代理给定的 Session
对象(如果有)。
一个 AsyncSession
实例,或 None
。
1.4.18 新版功能.
提供范围内的管理 AsyncSession
对象。
请参阅部分 使用异步作用域会话 有关用法详细信息,请参阅。
1.4.19 新版功能.
类签名
class sqlalchemy.ext.asyncio.async_scoped_session
(sqlalchemy.orm.scoping.ScopedSessionMixin
)
sqlalchemy.ext.asyncio.async_scoped_session.
__call__(**kw)¶inherited from the sqlalchemy.orm.scoping.ScopedSessionMixin.__call__
method of ScopedSessionMixin
返回当前 Session
,使用 scoped_session.session_factory
如果不在场的话。
**kw¶ -- 关键字参数将传递给 scoped_session.session_factory
如果现有的 Session
不存在。如果 Session
并且已经传递了关键字参数, InvalidRequestError
都被养大了。
sqlalchemy.ext.asyncio.async_scoped_session.
__init__(session_factory, scopefunc)¶构建新的 async_scoped_session
。
session_factory¶ -- 一家工厂将创造新的 AsyncSession
实例。这通常(但不一定)是 sessionmaker
,它本身被传递给 AsyncSession
至其 sessionmaker.class_
参数::Async_SESSION_FACTORY=sessionaker(Some_Async_Engine,class_=AsyncSession)AsyncSession=Async_Scope_Session(Async_Session_Factory,scope efunc=CURRENT_TASK)
scopefunc¶ -- 定义当前作用域的函数。函数,如 asyncio.current_task
在这里可能有用。
sqlalchemy.ext.asyncio.async_scoped_session.
add(instance, _warn=True)¶将对象放置在 Session
.
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
它的状态将在下次刷新操作时保留到数据库中。
重复呼叫 add()
将被忽略。相反的 add()
是 expunge()
.
sqlalchemy.ext.asyncio.async_scoped_session.
add_all(instances)¶将给定的实例集合添加到此 Session
.
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
sqlalchemy.ext.asyncio.async_scoped_session.
autoflush¶代理用于 AsyncSession
类代表 async_scoped_session
班级。
sqlalchemy.ext.asyncio.async_scoped_session.
begin(**kw)¶返回一 AsyncSessionTransaction
对象。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
底层 Session
将执行“开始”操作时 AsyncSessionTransaction
输入对象:
async with async_session.begin():
# .. ORM transaction is begun
请注意,数据库IO通常不会在会话级事务开始时发生,因为数据库事务是按需开始的。但是,begin块是异步的,以适应 SessionEvents.after_transaction_create()
可能执行IO的事件钩子。
有关ORM begin的一般描述,请参见 Session.begin()
.
sqlalchemy.ext.asyncio.async_scoped_session.
begin_nested(**kw)¶返回一 AsyncSessionTransaction
对象,它将开始一个“嵌套”事务,例如SAVEPOINT。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
行为与 AsyncSession.begin()
.
有关ORM begin nested的一般说明,请参阅 Session.begin_nested()
.
sqlalchemy.ext.asyncio.async_scoped_session.
close()¶关闭此对象使用的事务性资源和ORM对象 AsyncSession
。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
这将删除与此关联的所有ORM对象 AsyncSession
,结束正在进行的任何事务,并 releases 任何 AsyncConnection
此对象 AsyncSession
本身已从关联的 AsyncEngine
对象。然后,该操作将 AsyncSession
处于可以再次使用的状态。
小技巧
这个 AsyncSession.close()
方法 不会阻止再次使用该会话 。这个 AsyncSession
本身实际上并不具有明显的“关闭”状态;它只是表示 AsyncSession
将释放所有数据库连接和ORM对象。
参见
关闭 - detail on the semantics of
AsyncSession.close()
sqlalchemy.ext.asyncio.async_scoped_session.
classmethod close_all()¶全部关闭 AsyncSession
会议。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
sqlalchemy.ext.asyncio.async_scoped_session.
commit()¶提交当前正在进行的事务。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
sqlalchemy.ext.asyncio.async_scoped_session.
configure(**kwargs)¶inherited from the ScopedSessionMixin.configure()
method of ScopedSessionMixin
重新配置 sessionmaker
由此使用 scoped_session
。
sqlalchemy.ext.asyncio.async_scoped_session.
connection(**kw)¶返回A AsyncConnection
与此对应的对象 Session
对象的事务状态。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
此方法还可用于为当前事务使用的数据库连接建立执行选项。
1.4.24 新版功能: 添加了**kw参数,这些参数将传递到基础 Session.connection()
方法。
参见
Session.connection()
-“连接”的主要文档
sqlalchemy.ext.asyncio.async_scoped_session.
delete(instance)¶将实例标记为已删除。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
数据库删除操作发生在 flush()
.
由于此操作可能需要沿着卸载的关系级联,因此允许发生这些查询是可以等待的。
参见
Session.delete()
-删除的主要文档
sqlalchemy.ext.asyncio.async_scoped_session.
deleted¶此中标记为“已删除”的所有实例的集合 Session
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
sqlalchemy.ext.asyncio.async_scoped_session.
dirty¶所有持久实例的集合被认为是脏的。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
例如。::
some_mapped_object in session.dirty
实例在被修改但未被删除时被视为脏实例。
请注意,此“脏”计算是“乐观的”;大多数属性设置或集合修改操作都会将实例标记为“脏”并将其放置在此集合中,即使属性值没有净更改。在刷新时,将每个属性的值与以前保存的值进行比较,如果没有净更改,则不会发生SQL操作(这是一个更昂贵的操作,因此只在刷新时进行)。
要检查实例是否对其属性进行了可操作的网络更改,请使用 Session.is_modified()
方法。
sqlalchemy.ext.asyncio.async_scoped_session.
execute(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回缓冲区 Result
对象。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
参见
Session.execute()
-执行的主要文档
sqlalchemy.ext.asyncio.async_scoped_session.
expire(instance, attribute_names=None)¶使实例上的属性过期。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
将实例的属性标记为过期。下次访问过期属性时,将向 Session
对象的当前事务上下文,以便加载给定实例的所有过期属性。请注意,高度隔离的事务将返回与以前在同一事务中读取的值相同的值,而不考虑该事务外数据库状态的更改。
使中的所有对象过期 Session
同时,使用 Session.expire_all()
.
这个 Session
对象的默认行为是在 Session.rollback()
或 Session.commit()
方法,以便可以为新事务加载新状态。为此,请致电 Session.expire()
只有在当前事务中发出非ORM SQL语句的特定情况下才有意义。
sqlalchemy.ext.asyncio.async_scoped_session.
expire_all()¶使此会话中的所有永久实例过期。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
下次访问持久实例上的任何属性时,将使用 Session
对象的当前事务上下文,以便加载给定实例的所有过期属性。请注意,高度隔离的事务将返回与以前在同一事务中读取的值相同的值,而不考虑该事务外数据库状态的更改。
要使这些对象上的单个对象和单个属性过期,请使用 Session.expire()
.
这个 Session
对象的默认行为是在 Session.rollback()
或 Session.commit()
方法,以便可以为新事务加载新状态。为此,请致电 Session.expire_all()
当自动提交为 False
,假设事务是独立的。
sqlalchemy.ext.asyncio.async_scoped_session.
expunge(instance)¶移除 instance 由此 Session
.
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
这将释放对该实例的所有内部引用。将根据 删去 级联规则。
sqlalchemy.ext.asyncio.async_scoped_session.
expunge_all()¶从此中删除所有对象实例 Session
.
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
这相当于呼叫 expunge(obj)
在所有对象上 Session
.
sqlalchemy.ext.asyncio.async_scoped_session.
flush(objects=None)¶将所有对象更改刷新到数据库。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
参见
Session.flush()
-同花顺的主要文档
sqlalchemy.ext.asyncio.async_scoped_session.
get(entity, ident, options=None, populate_existing=False, with_for_update=None, identity_token=None)¶根据给定的主键标识符返回实例,或者 None
如果找不到的话。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
参见
Session.get()
-GET的主要文档
sqlalchemy.ext.asyncio.async_scoped_session.
get_bind(mapper=None, clause=None, bind=None, _sa_skip_events=None, _sa_skip_for_implicit_returning=False)¶返回一个“绑定”,此 Session
是绑定的。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
“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.asyncio.async_scoped_session.
classmethod identity_key(*args, **kwargs)¶返回标识密钥。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
这是的别名 identity_key()
.
sqlalchemy.ext.asyncio.async_scoped_session.
identity_map¶代理用于 AsyncSession
类代表 async_scoped_session
班级。
sqlalchemy.ext.asyncio.async_scoped_session.
info¶用户可修改字典。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
此字典的初始值可以使用 info
论据 Session
构造函数或 sessionmaker
构造函数或工厂方法。这里的字典总是本地的 Session
并且可以独立于所有其他 Session
物体。
sqlalchemy.ext.asyncio.async_scoped_session.
is_active¶如果这是真的 Session
不处于“部分回滚”状态。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
“部分回滚”状态通常表示 Session
已经失败了 Session.rollback()
方法才能完全回滚事务。
如果这样 Session
根本不在事务中 Session
第一次使用时会自动注册,所以在本例中 Session.is_active
将返回true。
否则,如果 Session
在事务中,并且该事务尚未在内部回滚,则 Session.is_active
也将返回True。
sqlalchemy.ext.asyncio.async_scoped_session.
is_modified(instance, include_collections=True)¶返回 True
如果给定实例具有本地修改的属性。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
此方法检索实例上每个已检测属性的历史记录,并将当前值与其以前提交的值(如果有)进行比较。
实际上,它是在 Session.dirty
集合;对每个属性的网络“脏”状态执行完整测试。
例如。::
return session.is_modified(someobject)
该方法的一些注意事项适用于:
存在于中的实例 Session.dirty
集合可能报告 False
当用这种方法测试时。这是因为对象可能通过属性突变接收到更改事件,因此将其放入 Session.dirty
但最终状态与从数据库加载的状态相同,因此此处不会发生任何净更改。
在应用新值时,如果在接收到新值时属性未被加载或已过期,则标量属性可能没有记录以前设置的值-在这些情况下,假定该属性发生更改,即使其数据库值最终没有净更改。在大多数情况下,当一个集合事件发生时,sqlAlchemy不需要“old”值,因此如果旧值不存在,它会跳过SQL调用的开销,这是基于通常需要更新标量值的假设,而在少数情况下,它不存在的情况下,平均比发出防御性选择的代价要低。
只有当属性容器具有 active_history
标志设置为 True
. 此标志通常为不是简单的多对一的主键属性和标量对象引用设置。要为任意映射列设置此标志,请使用 active_history
争论与 column_property()
.
sqlalchemy.ext.asyncio.async_scoped_session.
merge(instance, load=True, options=None)¶将给定实例的状态复制到 AsyncSession
.
代理用于 AsyncSession
类代表 async_scoped_session
班级。
参见
Session.merge()
-合并的主要文档
sqlalchemy.ext.asyncio.async_scoped_session.
new¶在此中标记为“new”的所有实例的集合 Session
.
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
sqlalchemy.ext.asyncio.async_scoped_session.
no_autoflush¶返回禁用自动刷新的上下文管理器。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
例如。::
with session.no_autoflush:
some_object = SomeClass()
session.add(some_object)
# won't autoflush
some_object.related_thing = session.query(SomeRelated).first()
在 with:
块不会受到查询访问时发生的刷新的影响。这在初始化涉及现有数据库查询的一系列对象时很有用,因为在这些对象中,尚未完成的对象尚未刷新。
sqlalchemy.ext.asyncio.async_scoped_session.
classmethod object_session(instance)¶返回 Session
对象所属的。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
代表 Session
代表 AsyncSession
班级。
这是的别名 object_session()
.
sqlalchemy.ext.asyncio.async_scoped_session.
refresh(instance, attribute_names=None, with_for_update=None)¶使给定实例上的属性过期并刷新。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
将向数据库发出一个查询,所有属性都将使用其当前数据库值进行刷新。
这是的异步版本 Session.refresh()
方法。有关所有选项的完整描述,请参见该方法。
参见
Session.refresh()
-更新的主要文档
sqlalchemy.ext.asyncio.async_scoped_session.
remove()¶处理掉当前的 AsyncSession
,如果存在。
与SCOPED_SESSION的REMOVE方法不同,此方法将使用AWAIT等待AsyncSession的Close方法。
sqlalchemy.ext.asyncio.async_scoped_session.
rollback()¶回滚正在进行的当前事务。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
sqlalchemy.ext.asyncio.async_scoped_session.
scalar(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回标量结果。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
参见
Session.scalar()
-标量的主要文档
sqlalchemy.ext.asyncio.async_scoped_session.
scalars(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回标量结果。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
一个 ScalarResult
对象
1.4.24 新版功能.
sqlalchemy.ext.asyncio.async_scoped_session.
stream(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶代理用于 AsyncSession
类代表 async_scoped_session
班级。
执行语句并返回流 AsyncResult
对象。
sqlalchemy.ext.asyncio.async_scoped_session.
stream_scalars(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回标量结果流。
代理用于 AsyncSession
类代表 async_scoped_session
班级。
一个 AsyncScalarResult
对象
1.4.24 新版功能.
的异步版本 Session
.
这个 AsyncSession
是传统的 Session
实例。
1.4 新版功能.
要使用 AsyncSession
带自定义 Session
实现,请参阅 AsyncSession.sync_session_class
参数。
类签名
class sqlalchemy.ext.asyncio.AsyncSession
(sqlalchemy.ext.asyncio.base.ReversibleProxy
)
sqlalchemy.ext.asyncio.AsyncSession.
sync_session_class = <class 'sqlalchemy.orm.session.Session'>¶类或可调用类,该类或可调用类提供基础 Session
实例为特定的 AsyncSession
。
在类级别,此属性是 AsyncSession.sync_session_class
参数。的自定义子类 AsyncSession
可以覆盖此设置。
在实例级别,此属性指示用于提供 Session
此实例的 AsyncSession
实例。
1.4.24 新版功能.
sqlalchemy.ext.asyncio.AsyncSession.
__init__(bind=None, binds=None, sync_session_class=None, **kw)¶构建新的 AsyncSession
。
除以外的所有参数 sync_session_class
传递给 sync_session_class
可直接调用以实例化新的 Session
。请参阅 Session.__init__()
有关参数文档,请参阅。
sync_session_class¶ -- A Session
子类或其他可调用类,这些子类或其他可调用对象将用于构造 Session
它将被代理。此参数可用于提供自定义 Session
子类。默认设置为 AsyncSession.sync_session_class
类级属性。。。添加的版本::1.4.24
sqlalchemy.ext.asyncio.AsyncSession.
add(instance, _warn=True)¶将对象放置在 Session
.
代表 Session
代表 AsyncSession
班级。
它的状态将在下次刷新操作时保留到数据库中。
重复呼叫 add()
将被忽略。相反的 add()
是 expunge()
.
sqlalchemy.ext.asyncio.AsyncSession.
add_all(instances)¶将给定的实例集合添加到此 Session
.
代表 Session
代表 AsyncSession
班级。
sqlalchemy.ext.asyncio.AsyncSession.
begin(**kw)¶返回一 AsyncSessionTransaction
对象。
底层 Session
将执行“开始”操作时 AsyncSessionTransaction
输入对象:
async with async_session.begin():
# .. ORM transaction is begun
请注意,数据库IO通常不会在会话级事务开始时发生,因为数据库事务是按需开始的。但是,begin块是异步的,以适应 SessionEvents.after_transaction_create()
可能执行IO的事件钩子。
有关ORM begin的一般描述,请参见 Session.begin()
.
sqlalchemy.ext.asyncio.AsyncSession.
begin_nested(**kw)¶返回一 AsyncSessionTransaction
对象,它将开始一个“嵌套”事务,例如SAVEPOINT。
行为与 AsyncSession.begin()
.
有关ORM begin nested的一般说明,请参阅 Session.begin_nested()
.
sqlalchemy.ext.asyncio.AsyncSession.
close()¶关闭此对象使用的事务性资源和ORM对象 AsyncSession
。
这将删除与此关联的所有ORM对象 AsyncSession
,结束正在进行的任何事务,并 releases 任何 AsyncConnection
此对象 AsyncSession
本身已从关联的 AsyncEngine
对象。然后,该操作将 AsyncSession
处于可以再次使用的状态。
小技巧
这个 AsyncSession.close()
方法 不会阻止再次使用该会话 。这个 AsyncSession
本身实际上并不具有明显的“关闭”状态;它只是表示 AsyncSession
将释放所有数据库连接和ORM对象。
参见
关闭 - detail on the semantics of
AsyncSession.close()
sqlalchemy.ext.asyncio.AsyncSession.
async classmethod close_all()¶全部关闭 AsyncSession
会议。
sqlalchemy.ext.asyncio.AsyncSession.
commit()¶提交当前正在进行的事务。
sqlalchemy.ext.asyncio.AsyncSession.
connection(**kw)¶返回A AsyncConnection
与此对应的对象 Session
对象的事务状态。
此方法还可用于为当前事务使用的数据库连接建立执行选项。
1.4.24 新版功能: 添加了**kw参数,这些参数将传递到基础 Session.connection()
方法。
参见
Session.connection()
-“连接”的主要文档
sqlalchemy.ext.asyncio.AsyncSession.
delete(instance)¶将实例标记为已删除。
数据库删除操作发生在 flush()
.
由于此操作可能需要沿着卸载的关系级联,因此允许发生这些查询是可以等待的。
参见
Session.delete()
-删除的主要文档
sqlalchemy.ext.asyncio.AsyncSession.
deleted¶此中标记为“已删除”的所有实例的集合 Session
代表 Session
代表 AsyncSession
班级。
sqlalchemy.ext.asyncio.AsyncSession.
dirty¶所有持久实例的集合被认为是脏的。
代表 Session
代表 AsyncSession
班级。
例如。::
some_mapped_object in session.dirty
实例在被修改但未被删除时被视为脏实例。
请注意,此“脏”计算是“乐观的”;大多数属性设置或集合修改操作都会将实例标记为“脏”并将其放置在此集合中,即使属性值没有净更改。在刷新时,将每个属性的值与以前保存的值进行比较,如果没有净更改,则不会发生SQL操作(这是一个更昂贵的操作,因此只在刷新时进行)。
要检查实例是否对其属性进行了可操作的网络更改,请使用 Session.is_modified()
方法。
sqlalchemy.ext.asyncio.AsyncSession.
execute(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回缓冲区 Result
对象。
参见
Session.execute()
-执行的主要文档
sqlalchemy.ext.asyncio.AsyncSession.
expire(instance, attribute_names=None)¶使实例上的属性过期。
代表 Session
代表 AsyncSession
班级。
将实例的属性标记为过期。下次访问过期属性时,将向 Session
对象的当前事务上下文,以便加载给定实例的所有过期属性。请注意,高度隔离的事务将返回与以前在同一事务中读取的值相同的值,而不考虑该事务外数据库状态的更改。
使中的所有对象过期 Session
同时,使用 Session.expire_all()
.
这个 Session
对象的默认行为是在 Session.rollback()
或 Session.commit()
方法,以便可以为新事务加载新状态。为此,请致电 Session.expire()
只有在当前事务中发出非ORM SQL语句的特定情况下才有意义。
sqlalchemy.ext.asyncio.AsyncSession.
expire_all()¶使此会话中的所有永久实例过期。
代表 Session
代表 AsyncSession
班级。
下次访问持久实例上的任何属性时,将使用 Session
对象的当前事务上下文,以便加载给定实例的所有过期属性。请注意,高度隔离的事务将返回与以前在同一事务中读取的值相同的值,而不考虑该事务外数据库状态的更改。
要使这些对象上的单个对象和单个属性过期,请使用 Session.expire()
.
这个 Session
对象的默认行为是在 Session.rollback()
或 Session.commit()
方法,以便可以为新事务加载新状态。为此,请致电 Session.expire_all()
当自动提交为 False
,假设事务是独立的。
sqlalchemy.ext.asyncio.AsyncSession.
expunge(instance)¶移除 instance 由此 Session
.
代表 Session
代表 AsyncSession
班级。
这将释放对该实例的所有内部引用。将根据 删去 级联规则。
sqlalchemy.ext.asyncio.AsyncSession.
expunge_all()¶从此中删除所有对象实例 Session
.
代表 Session
代表 AsyncSession
班级。
这相当于呼叫 expunge(obj)
在所有对象上 Session
.
sqlalchemy.ext.asyncio.AsyncSession.
flush(objects=None)¶将所有对象更改刷新到数据库。
参见
Session.flush()
-同花顺的主要文档
sqlalchemy.ext.asyncio.AsyncSession.
get(entity, ident, options=None, populate_existing=False, with_for_update=None, identity_token=None)¶根据给定的主键标识符返回实例,或者 None
如果找不到的话。
参见
Session.get()
-GET的主要文档
sqlalchemy.ext.asyncio.AsyncSession.
get_bind(mapper=None, clause=None, bind=None, _sa_skip_events=None, _sa_skip_for_implicit_returning=False)¶返回一个“绑定”,此 Session
是绑定的。
代表 Session
代表 AsyncSession
班级。
“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.asyncio.AsyncSession.
get_nested_transaction()¶返回当前正在进行的嵌套事务(如果有)。
一个 AsyncSessionTransaction
对象,或 None
。
1.4.18 新版功能.
sqlalchemy.ext.asyncio.AsyncSession.
get_transaction()¶返回正在进行的当前根事务(如果有)。
一个 AsyncSessionTransaction
对象,或 None
。
1.4.18 新版功能.
sqlalchemy.ext.asyncio.AsyncSession.
classmethod identity_key(*args, **kwargs)¶返回标识密钥。
代表 Session
代表 AsyncSession
班级。
这是的别名 identity_key()
.
sqlalchemy.ext.asyncio.AsyncSession.
in_nested_transaction()¶如果出现以下情况,则返回True Session
已开始嵌套事务,例如保存点。
代表 Session
代表 AsyncSession
班级。
1.4 新版功能.
sqlalchemy.ext.asyncio.AsyncSession.
in_transaction()¶如果出现以下情况,则返回True Session
已经开始了一项交易。
代表 Session
代表 AsyncSession
班级。
1.4 新版功能.
sqlalchemy.ext.asyncio.AsyncSession.
info¶用户可修改字典。
代表 Session
代表 AsyncSession
班级。
此字典的初始值可以使用 info
论据 Session
构造函数或 sessionmaker
构造函数或工厂方法。这里的字典总是本地的 Session
并且可以独立于所有其他 Session
物体。
sqlalchemy.ext.asyncio.AsyncSession.
is_active¶如果这是真的 Session
不处于“部分回滚”状态。
代表 Session
代表 AsyncSession
班级。
“部分回滚”状态通常表示 Session
已经失败了 Session.rollback()
方法才能完全回滚事务。
如果这样 Session
根本不在事务中 Session
第一次使用时会自动注册,所以在本例中 Session.is_active
将返回true。
否则,如果 Session
在事务中,并且该事务尚未在内部回滚,则 Session.is_active
也将返回True。
sqlalchemy.ext.asyncio.AsyncSession.
is_modified(instance, include_collections=True)¶返回 True
如果给定实例具有本地修改的属性。
代表 Session
代表 AsyncSession
班级。
此方法检索实例上每个已检测属性的历史记录,并将当前值与其以前提交的值(如果有)进行比较。
实际上,它是在 Session.dirty
集合;对每个属性的网络“脏”状态执行完整测试。
例如。::
return session.is_modified(someobject)
该方法的一些注意事项适用于:
存在于中的实例 Session.dirty
集合可能报告 False
当用这种方法测试时。这是因为对象可能通过属性突变接收到更改事件,因此将其放入 Session.dirty
但最终状态与从数据库加载的状态相同,因此此处不会发生任何净更改。
在应用新值时,如果在接收到新值时属性未被加载或已过期,则标量属性可能没有记录以前设置的值-在这些情况下,假定该属性发生更改,即使其数据库值最终没有净更改。在大多数情况下,当一个集合事件发生时,sqlAlchemy不需要“old”值,因此如果旧值不存在,它会跳过SQL调用的开销,这是基于通常需要更新标量值的假设,而在少数情况下,它不存在的情况下,平均比发出防御性选择的代价要低。
只有当属性容器具有 active_history
标志设置为 True
. 此标志通常为不是简单的多对一的主键属性和标量对象引用设置。要为任意映射列设置此标志,请使用 active_history
争论与 column_property()
.
sqlalchemy.ext.asyncio.AsyncSession.
merge(instance, load=True, options=None)¶将给定实例的状态复制到 AsyncSession
.
参见
Session.merge()
-合并的主要文档
sqlalchemy.ext.asyncio.AsyncSession.
new¶在此中标记为“new”的所有实例的集合 Session
.
代表 Session
代表 AsyncSession
班级。
sqlalchemy.ext.asyncio.AsyncSession.
no_autoflush¶返回禁用自动刷新的上下文管理器。
代表 Session
代表 AsyncSession
班级。
例如。::
with session.no_autoflush:
some_object = SomeClass()
session.add(some_object)
# won't autoflush
some_object.related_thing = session.query(SomeRelated).first()
在 with:
块不会受到查询访问时发生的刷新的影响。这在初始化涉及现有数据库查询的一系列对象时很有用,因为在这些对象中,尚未完成的对象尚未刷新。
sqlalchemy.ext.asyncio.AsyncSession.
classmethod object_session(instance)¶返回 Session
对象所属的。
代表 Session
代表 AsyncSession
班级。
这是的别名 object_session()
.
sqlalchemy.ext.asyncio.AsyncSession.
refresh(instance, attribute_names=None, with_for_update=None)¶使给定实例上的属性过期并刷新。
将向数据库发出一个查询,所有属性都将使用其当前数据库值进行刷新。
这是的异步版本 Session.refresh()
方法。有关所有选项的完整描述,请参见该方法。
参见
Session.refresh()
-更新的主要文档
sqlalchemy.ext.asyncio.AsyncSession.
rollback()¶回滚正在进行的当前事务。
sqlalchemy.ext.asyncio.AsyncSession.
run_sync(fn, *arg, **kw)¶调用给定的sync callable,将sync self作为第一个参数传递。
此方法通过在一个特殊检测的greenlet中运行给定的callable来维护从到数据库连接的asyncio事件循环。
例如。::
with AsyncSession(async_engine) as session:
await session.run_sync(some_business_method)
注解
提供的Callable在异步事件循环内内联调用,并将在传统IO调用上挡路。此可调用对象中的IO应该只调用SQLAlChemy的异步数据库API,这些API将适当地适应greenlet上下文。
sqlalchemy.ext.asyncio.AsyncSession.
scalar(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回标量结果。
参见
Session.scalar()
-标量的主要文档
sqlalchemy.ext.asyncio.AsyncSession.
scalars(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回标量结果。
一个 ScalarResult
对象
1.4.24 新版功能.
sqlalchemy.ext.asyncio.AsyncSession.
stream(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回流 AsyncResult
对象。
sqlalchemy.ext.asyncio.AsyncSession.
stream_scalars(statement, params=None, execution_options={}, bind_arguments=None, **kw)¶执行语句并返回标量结果流。
一个 AsyncScalarResult
对象
1.4.24 新版功能.
sqlalchemy.ext.asyncio.AsyncSession.
sync_session: sqlalchemy.orm.session.Session¶对基础的 Session
这 AsyncSession
代理请求指向。
此实例可以用作事件目标。
参见
ORM的包装 SessionTransaction
对象。
提供此对象,以便为 AsyncSession.begin()
可能会被退回。
对象支持对的两个显式调用 AsyncSessionTransaction.commit()
和 AsyncSessionTransaction.rollback()
,以及用作异步上下文管理器。
1.4 新版功能.
类签名
class sqlalchemy.ext.asyncio.AsyncSessionTransaction
(sqlalchemy.ext.asyncio.base.ReversibleProxy
, sqlalchemy.ext.asyncio.base.StartableContext
)
sqlalchemy.ext.asyncio.AsyncSessionTransaction.
commit()¶提交此 AsyncTransaction
.
sqlalchemy.ext.asyncio.AsyncSessionTransaction.
rollback()¶回滚这个 AsyncTransaction
.
flambé! the dragon and The Alchemist image designs created and generously donated by Rotem Yaari.
Created using Sphinx 4.2.0.