Release: 1.4.25 | Release Date: September 22, 2021

SQLAlchemy 1.4 Documentation

异步I/O(异步)

支持Python异步。包括对Core和ORM使用的支持,使用了异步兼容的方言。

1.4 新版功能.

注解

从SQLAlChemy 1.4.3开始的异步扩展现在可以被认为是 测试级 软件。API细节可能会更改,但是在这一点上,不太可能有重大的向后不兼容更改。

参见

对内核和ORM的异步IO支持 -初始功能发布

异步集成 -示例脚本演示了asyncio扩展中核心和ORM使用的工作示例。

Asyncio平台安装说明

异步扩展至少需要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, ))

概要-ORM

使用 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_backrefsFalse ,这可能会影响将相关对象保存到数据库的方式。

使用AsyncSession时防止隐式IO

使用传统的异步方式,应用程序需要避免可能发生按属性访问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.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()

在Asyncio下运行同步方法和函数

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 . 区别如下:

  1. 与使用时不同 gevent ,我们可以继续使用标准Python异步事件循环或任何自定义事件循环,而无需集成到 gevent 事件循环。

  2. 根本不存在“恶作剧”。上面的例子使用了一个真正的异步驱动程序,底层的SQLAlchemy连接池也使用了Python内置的 asyncio.Queue 用于池连接。

  3. 该程序可以在异步/等待代码和包含的使用同步代码的函数之间自由切换,几乎没有性能损失。没有“线程执行器”或任何其他等待器或同步正在使用。

  4. 底层网络驱动程序也使用纯Python异步概念,没有第三方网络库 geventeventlet 提供正在使用中。

使用带有异步扩展名的事件

SQL炼金术 event system 不是由异步扩展直接公开的,这意味着还没有“异步”版本的SQLAlChemy事件处理程序。

然而,由于异步扩展围绕着通常的同步SQLAlChemy API,常规的“同步”样式的事件处理程序是免费可用的,就像不使用异步时一样。

如下所述,当前有两种策略来注册给定的异步面向异步API的事件:

当在异步上下文中的事件处理程序中工作时, Connection 继续以通常的“同步”方式工作,而不需要 awaitasync 当异步数据库适配器最终接收到消息时,调用风格被透明地调整回异步调用风格。对于传递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())

发动机API文档

Object Name Description

AsyncConnection

的异步代理 Connection .

AsyncEngine

的异步代理 Engine .

AsyncTransaction

的异步代理 Transaction .

create_async_engine(*arg, **kw)

创建新的异步引擎实例。

function sqlalchemy.ext.asyncio.create_async_engine(*arg, **kw)

创建新的异步引擎实例。

传递给的参数 create_async_engine() 与传递给 create_engine() 功能。指定的方言必须是异步兼容方言,例如 异步PG .

1.4 新版功能.

class sqlalchemy.ext.asyncio.AsyncEngine(sync_engine)

的异步代理 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)

method 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)"))
method sqlalchemy.ext.asyncio.AsyncEngine.clear_compiled_cache()

清除与方言关联的已编译缓存。

代表 Engine 代表 AsyncEngine 班级。

这适用 only 到通过建立的内置缓存 create_engine.query_cache_size 参数。它不会影响通过 Connection.execution_options.query_cache 参数。

1.4 新版功能.

method sqlalchemy.ext.asyncio.AsyncEngine.connect()

返回一 AsyncConnection 对象。

这个 AsyncConnection 当作为异步上下文管理器输入时,将从基础连接池获取数据库连接:

async with async_engine.connect() as conn:
    result = await conn.execute(select(user_table))

这个 AsyncConnection 也可以通过调用上下文管理器的 AsyncConnection.start() 方法。

async method sqlalchemy.ext.asyncio.AsyncEngine.dispose()

释放此使用的连接池 AsyncEngine .

这将关闭所有 当前已签入 . 请参阅文档以了解 Engine.dispose() 进一步说明的方法。

参见

Engine.dispose()

method sqlalchemy.ext.asyncio.AsyncEngine.execution_options(**opt)

返回一个新的 AsyncEngine 这将提供 AsyncConnection 具有给定执行选项的对象。

代理自 Engine.execution_options() . 有关详细信息,请参见该方法。

method sqlalchemy.ext.asyncio.AsyncEngine.get_execution_options()

获取将在执行期间生效的非SQL选项。

代表 Engine 代表 AsyncEngine 班级。

async method sqlalchemy.ext.asyncio.AsyncEngine.raw_connection()

从连接池返回“原始”DBAPI连接。

attribute sqlalchemy.ext.asyncio.AsyncEngine.sync_engine

对同步样式的引用 EngineAsyncEngine 代理请求指向。

此实例可以用作事件目标。

method sqlalchemy.ext.asyncio.AsyncEngine.update_execution_options(**opt)

更新此的默认执行选项字典 Engine .

代表 Engine 代表 AsyncEngine 班级。

中给定的键/值 * *opt被添加到将用于所有连接的默认执行选项中。本词典的初始内容可通过 execution_options 参数到 create_engine() .

class sqlalchemy.ext.asyncio.AsyncConnection(async_engine, sync_connection=None)

的异步代理 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)

method sqlalchemy.ext.asyncio.AsyncConnection.begin()

在自动注册之前开始事务。

method sqlalchemy.ext.asyncio.AsyncConnection.begin_nested()

开始嵌套事务并返回事务句柄。

async method sqlalchemy.ext.asyncio.AsyncConnection.close()

关闭此 AsyncConnection .

如果有事务,这也有回滚事务的效果。

async method sqlalchemy.ext.asyncio.AsyncConnection.commit()

提交当前正在进行的事务。

此方法提交当前事务(如果已启动)。如果没有启动任何事务,则假定连接处于非无效状态,则该方法无效。

交易开始于 Connection 当第一次执行语句时自动执行,或者 Connection.begin() 方法被调用。

attribute sqlalchemy.ext.asyncio.AsyncConnection.connection

没有为异步实现;调用 AsyncConnection.get_raw_connection() .

async method sqlalchemy.ext.asyncio.AsyncConnection.exec_driver_sql(statement, parameters=None, execution_options={})

执行驱动程序级别的SQL字符串并返回缓冲区 Result .

async method sqlalchemy.ext.asyncio.AsyncConnection.execute(statement, parameters=None, execution_options={})

执行SQL语句构造并返回缓冲区 Result .

参数
  • object --

    要执行的语句。这始终是一个同时位于 ClauseElementExecutable 层次结构,包括:

  • parameters -- 将绑定到语句中的参数。这可以是参数名到值的字典,也可以是字典的可变序列(例如列表)。当传递字典列表时,底层语句执行将使用DBAPI cursor.executemany() 方法。当传递单个字典时,DBAPI cursor.execute() 方法。

  • execution_options -- 执行选项的可选字典,它将与语句执行关联。此字典可以提供接受的选项的子集 Connection.execution_options() .

返回

Result 对象。

async method sqlalchemy.ext.asyncio.AsyncConnection.execution_options(**opt)

为在执行期间生效的连接设置非SQL选项。

这个返回这个 AsyncConnection 对象添加了新选项。

Connection.execution_options() 有关此方法的详细信息。

method sqlalchemy.ext.asyncio.AsyncConnection.get_nested_transaction()

返回一个 AsyncTransaction 表示当前嵌套(保存点)事务(如果有)。

这利用了底层同步连接的 Connection.get_nested_transaction() 方法来获取当前 Transaction ,然后在新的 AsyncTransaction 对象。

1.4.0b2 新版功能.

async method sqlalchemy.ext.asyncio.AsyncConnection.get_raw_connection()

返回此使用的池DBAPI级别连接 AsyncConnection .

这是SQLAlChemy连接池代理连接,然后该连接具有属性 _ConnectionFairy.driver_connection 这指的是实际的驱动程序连接。它的 _ConnectionFairy.dbapi_connection 而是指一个 AdaptedConnection 实例,该实例使驱动程序连接适应DBAPI协议。

method sqlalchemy.ext.asyncio.AsyncConnection.get_transaction()

返回一个 AsyncTransaction 表示当前事务(如果有)的。

这利用了底层同步连接的 Connection.get_transaction() 方法来获取当前 Transaction ,然后在新的 AsyncTransaction 对象。

1.4.0b2 新版功能.

method sqlalchemy.ext.asyncio.AsyncConnection.in_nested_transaction()

如果事务正在进行,则返回True。

1.4.0b2 新版功能.

method sqlalchemy.ext.asyncio.AsyncConnection.in_transaction()

如果事务正在进行,则返回True。

1.4.0b2 新版功能.

attribute sqlalchemy.ext.asyncio.AsyncConnection.info

返回 Connection.info 基础数据库的字典 Connection

对于与数据库连接相关联的用户定义状态,此字典可以自由写入。

此属性仅在以下情况下可用 AsyncConnection 当前已连接。如果 AsyncConnection.closed 属性为 True ,则访问此属性将引发 ResourceClosedError

1.4.0b2 新版功能.

async method sqlalchemy.ext.asyncio.AsyncConnection.invalidate(exception=None)

使与此关联的基础DBAPI连接失效 Connection .

见方法 Connection.invalidate() 关于这个方法的全部细节。

async method sqlalchemy.ext.asyncio.AsyncConnection.rollback()

回滚当前正在进行的事务。

如果当前事务已启动,此方法将回滚当前事务。如果没有启动任何事务,则该方法无效。如果事务已启动且连接处于无效状态,则使用此方法清除该事务。

交易开始于 Connection 当第一次执行语句时自动执行,或者 Connection.begin() 方法被调用。

async method 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上下文。

async method sqlalchemy.ext.asyncio.AsyncConnection.scalar(statement, parameters=None, execution_options={})

执行SQL语句构造并返回标量对象。

此方法是调用 Result.scalar() 方法调用 Connection.execute() 方法。参数是等效的。

返回

一个标量Python值,表示返回的第一行的第一列。

async method sqlalchemy.ext.asyncio.AsyncConnection.scalars(statement, parameters=None, execution_options={})

执行SQL语句构造并返回标量对象。

此方法是调用 Result.scalars() 在调用 Connection.execute() 方法。参数是等效的。

返回

一个 ScalarResult 对象。

1.4.24 新版功能.

async method sqlalchemy.ext.asyncio.AsyncConnection.start(is_ctxmanager=False)

开始吧 AsyncConnection 对象的上下文在使用Python之外 with: 块。

async method sqlalchemy.ext.asyncio.AsyncConnection.stream(statement, parameters=None, execution_options={})

执行语句并返回流 AsyncResult 对象。

async method sqlalchemy.ext.asyncio.AsyncConnection.stream_scalars(statement, parameters=None, execution_options={})

执行SQL语句并返回流式标量结果对象。

此方法是调用 AsyncResult.scalars() 在调用 Connection.stream() 方法。参数是等效的。

返回

一个 AsyncScalarResult 对象。

1.4.24 新版功能.

attribute sqlalchemy.ext.asyncio.AsyncConnection.sync_connection

对同步样式的引用 ConnectionAsyncConnection 代理请求指向。

此实例可以用作事件目标。

attribute sqlalchemy.ext.asyncio.AsyncConnection.sync_engine

对同步样式的引用 EngineAsyncConnection 通过其基础结构与 Connection

此实例可以用作事件目标。

class sqlalchemy.ext.asyncio.AsyncTransaction(connection, nested=False)

的异步代理 Transaction .

类签名

class sqlalchemy.ext.asyncio.AsyncTransaction (sqlalchemy.ext.asyncio.base.ProxyComparable, sqlalchemy.ext.asyncio.base.StartableContext)

async method sqlalchemy.ext.asyncio.AsyncTransaction.close()

关闭此 Transaction .

如果此事务是begin/commit嵌套中的基本事务,则该事务将回滚()。否则,方法返回。

这用于取消事务,而不影响封闭事务的范围。

async method sqlalchemy.ext.asyncio.AsyncTransaction.commit()

提交此 Transaction .

async method sqlalchemy.ext.asyncio.AsyncTransaction.rollback()

回滚这个 Transaction .

async method sqlalchemy.ext.asyncio.AsyncTransaction.start(is_ctxmanager=False)

开始吧 AsyncTransaction 对象的上下文在使用Python之外 with: 块。

结果集API文档

这个 AsyncResult 对象是 Result 对象。只有在使用 AsyncConnection.stream()AsyncSession.stream() 方法,返回位于活动数据库游标顶部的结果对象。

Object Name Description

AsyncMappingResult

包装纸 AsyncResult 返回字典值而不是 Row 价值观。

AsyncResult

一个异步包装器 Result 对象。

AsyncScalarResult

包装纸 AsyncResult 返回标量值而不是 Row 价值观。

class sqlalchemy.ext.asyncio.AsyncResult(real_result)

一个异步包装器 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)

async method sqlalchemy.ext.asyncio.AsyncResult.all()

返回列表中的所有行。

调用后关闭结果集。随后的调用将返回一个空列表。

返回

一览表 Row 物体。

method sqlalchemy.ext.asyncio.AsyncResult.columns(*col_expressions)

建立每行中应返回的列。

参照 Result.columns() 在同步SQLAlchemy API中获取完整的行为描述。

async method sqlalchemy.ext.asyncio.AsyncResult.fetchmany(size=None)

取许多行。

当所有行都用完时,返回一个空列表。

与AlchemY.1.1兼容。

要获取组中的行,请使用 AsyncResult.partitions() 方法。

返回

一览表 Row 物体。

async method sqlalchemy.ext.asyncio.AsyncResult.fetchone()

取一行。

当所有行都用完时,返回None。

与AlchemY.1.1兼容。

要只获取结果的第一行,请使用 Result.first() 方法。要遍历所有行,请迭代 Result 直接对象。

返回

Row 对象(如果未应用筛选器),或者如果没有保留行,则为无。

async method sqlalchemy.ext.asyncio.AsyncResult.first()

获取第一行,如果没有行,则不获取。

关闭结果集并丢弃其余行。

注解

此方法返回一个 row ,例如,默认情况下是元组。要只返回一个标量值,即第一行的第一列,请使用 AsyncResult.scalar() 方法或组合 AsyncResult.scalars()AsyncResult.first() .

返回

Row 对象,如果没有行保留,则无。

async method sqlalchemy.ext.asyncio.AsyncResult.freeze()

返回一个可调用的对象,该对象将生成此 AsyncResult 当被调用时。

返回的可调用对象是 FrozenResult .

这用于结果集缓存。当结果尚未使用时,必须对其调用该方法,而调用该方法将完全消耗结果。当 FrozenResult 从缓存中检索时,可以多次调用它,其中它将生成一个新的 Result 对象每次针对其存储的行集。

参见

重新执行语句 -ORM中实现结果集缓存的示例用法。

method sqlalchemy.ext.asyncio.AsyncResult.keys()

返回 Result.keys() 从底层收集 Result .

method sqlalchemy.ext.asyncio.AsyncResult.mappings()

对返回的行应用映射筛选器,返回 AsyncMappingResult .

应用此筛选器时,获取行将返回 RowMapping 对象而不是 Row 物体。

参照 Result.mappings() 在同步SQLAlchemy API中获取完整的行为描述。

返回

一个新的 AsyncMappingResult 筛选引用基础 Result 对象。

method sqlalchemy.ext.asyncio.AsyncResult.merge(*others)

合并此 AsyncResult 与其他兼容的结果对象。

返回的对象是的实例 MergedResult 给定的迭代器将由以下对象组成。

新结果将使用此结果对象中的元数据。后续的结果对象必须针对相同的结果/游标元数据集,否则行为未定义。

async method sqlalchemy.ext.asyncio.AsyncResult.one()

只返回一行或引发异常。

加薪 NoResultFound 如果结果没有返回行,或者 MultipleResultsFound 如果返回多行。

注解

此方法返回一个 row ,例如,默认情况下是元组。要只返回一个标量值,即第一行的第一列,请使用 AsyncResult.scalar_one() 方法或组合 AsyncResult.scalars()AsyncResult.one() .

1.4 新版功能.

返回

第一 Row .

加薪

MultipleResultsFound, NoResultFound

async method sqlalchemy.ext.asyncio.AsyncResult.one_or_none()

最多返回一个结果或引发异常。

返回 None 如果结果没有行。加薪 MultipleResultsFound 如果返回多行。

1.4 新版功能.

返回

第一 Row 如果没有行可用,则无。

加薪

MultipleResultsFound

method 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)
async method sqlalchemy.ext.asyncio.AsyncResult.scalar()

获取第一行的第一列,并关闭结果集。

如果没有要获取的行,则返回None。

不执行验证来测试是否还有其他行。

调用此方法后,对象将完全关闭,例如 CursorResult.close() 将调用方法。

返回

Python标量值,如果没有行保留,则为无。

async method sqlalchemy.ext.asyncio.AsyncResult.scalar_one()

只返回一个标量结果或引发异常。

这相当于调用 AsyncResult.scalars() 然后 AsyncResult.one()

async method sqlalchemy.ext.asyncio.AsyncResult.scalar_one_or_none()

只返回一个或不返回标量结果。

这相当于调用 AsyncResult.scalars() 然后 AsyncResult.one_or_none()

method sqlalchemy.ext.asyncio.AsyncResult.scalars(index=0)

返回一 AsyncScalarResult 将返回单个元素而不是 Row 物体。

参照 Result.scalars() 在同步SQLAlchemy API中获取完整的行为描述。

参数

index -- 整数或行键,指示要从每行提取的列,默认为 0 表示第一列。

返回

一个新的 AsyncScalarResult 引用此的筛选对象 AsyncResult 对象。

method sqlalchemy.ext.asyncio.AsyncResult.unique(strategy=None)

对此返回的对象应用唯一筛选 AsyncResult .

参照 Result.unique() 在同步SQLAlchemy API中获取完整的行为描述。

class sqlalchemy.ext.asyncio.AsyncScalarResult(real_result, index)

包装纸 AsyncResult 返回标量值而不是 Row 价值观。

这个 AsyncScalarResult 对象是通过调用 AsyncResult.scalars() 方法。

参考 ScalarResult 对象,以获取完整的行为描述。

1.4 新版功能.

类签名

class sqlalchemy.ext.asyncio.AsyncScalarResult (sqlalchemy.ext.asyncio.AsyncCommon)

async method sqlalchemy.ext.asyncio.AsyncScalarResult.all()

返回列表中的所有标量值。

相当于 AsyncResult.all() 除了标量值,而不是 Row 对象,则返回。

async method sqlalchemy.ext.asyncio.AsyncScalarResult.fetchall()

的同义词 AsyncScalarResult.all() 方法。

async method sqlalchemy.ext.asyncio.AsyncScalarResult.fetchmany(size=None)

获取许多对象。

相当于 AsyncResult.fetchmany() 除了标量值,而不是 Row 对象,则返回。

async method sqlalchemy.ext.asyncio.AsyncScalarResult.first()

获取第一个对象,如果没有对象,则不获取。

相当于 AsyncResult.first() 除了标量值,而不是 Row 对象,则返回。

async method sqlalchemy.ext.asyncio.AsyncScalarResult.one()

只返回一个对象或引发异常。

相当于 AsyncResult.one() 除了标量值,而不是 Row 对象,则返回。

async method sqlalchemy.ext.asyncio.AsyncScalarResult.one_or_none()

最多返回一个对象或引发异常。

相当于 AsyncResult.one_or_none() 除了标量值,而不是 Row 对象,则返回。

method sqlalchemy.ext.asyncio.AsyncScalarResult.partitions(size=None)

迭代给定大小的元素的子列表。

相当于 AsyncResult.partitions() 除了标量值,而不是 Row 对象,则返回。

method sqlalchemy.ext.asyncio.AsyncScalarResult.unique(strategy=None)

对此返回的对象应用唯一筛选 AsyncScalarResult .

AsyncResult.unique() 有关用法的详细信息。

class sqlalchemy.ext.asyncio.AsyncMappingResult(result)

包装纸 AsyncResult 返回字典值而不是 Row 价值观。

这个 AsyncMappingResult 对象是通过调用 AsyncResult.mappings() 方法。

参考 MappingResult 对象,以获取完整的行为描述。

1.4 新版功能.

类签名

class sqlalchemy.ext.asyncio.AsyncMappingResult (sqlalchemy.ext.asyncio.AsyncCommon)

async method sqlalchemy.ext.asyncio.AsyncMappingResult.all()

返回列表中的所有标量值。

相当于 AsyncResult.all() 除了映射值,而不是 Row 对象,则返回。

method sqlalchemy.ext.asyncio.AsyncMappingResult.columns(*col_expressions)

建立每行中应返回的列。

async method sqlalchemy.ext.asyncio.AsyncMappingResult.fetchall()

的同义词 AsyncMappingResult.all() 方法。

async method sqlalchemy.ext.asyncio.AsyncMappingResult.fetchmany(size=None)

获取许多对象。

相当于 AsyncResult.fetchmany() 除了映射值,而不是 Row 对象,则返回。

async method sqlalchemy.ext.asyncio.AsyncMappingResult.fetchone()

取一个对象。

相当于 AsyncResult.fetchone() 除了映射值,而不是 Row 对象,则返回。

async method sqlalchemy.ext.asyncio.AsyncMappingResult.first()

获取第一个对象,如果没有对象,则不获取。

相当于 AsyncResult.first() 除了映射值,而不是 Row 对象,则返回。

method sqlalchemy.ext.asyncio.AsyncMappingResult.keys()

返回一个iterable视图,该视图生成由每个键表示的字符串键 Row .

还可以使用Python测试视图的密钥包含 in 运算符,它将测试视图中表示的字符串键以及可选键(如列对象)。

在 1.4 版更改: 返回键视图对象而不是纯列表。

async method sqlalchemy.ext.asyncio.AsyncMappingResult.one()

只返回一个对象或引发异常。

相当于 AsyncResult.one() 除了映射值,而不是 Row 对象,则返回。

async method sqlalchemy.ext.asyncio.AsyncMappingResult.one_or_none()

最多返回一个对象或引发异常。

相当于 AsyncResult.one_or_none() 除了映射值,而不是 Row 对象,则返回。

method sqlalchemy.ext.asyncio.AsyncMappingResult.partitions(size=None)

迭代给定大小的元素的子列表。

相当于 AsyncResult.partitions() 除了映射值,而不是 Row 对象,则返回。

method sqlalchemy.ext.asyncio.AsyncMappingResult.unique(strategy=None)

对此返回的对象应用唯一筛选 AsyncMappingResult .

AsyncResult.unique() 有关用法的详细信息。

ORM会话API文档

Object Name Description

async_object_session(instance)

返回 AsyncSession 给定实例所属的。

async_scoped_session

提供范围内的管理 AsyncSession 对象。

async_session(session)

返回 AsyncSession 它代理给定的 Session 对象(如果有)。

AsyncSession

的异步版本 Session .

AsyncSessionTransaction

ORM的包装 SessionTransaction 对象。

function sqlalchemy.ext.asyncio.async_object_session(instance)

返回 AsyncSession 给定实例所属的。

此函数利用sync-api函数 object_session 检索 Session 它引用给定的实例,并从那里将其链接到原始实例 AsyncSession

如果 AsyncSession 已被垃圾回收,则返回值为 None

此功能也可以从 InstanceState.async_session 访问者。

参数

instance -- ORM映射的实例

返回

一个 AsyncSession 对象,或 None

1.4.18 新版功能.

function sqlalchemy.ext.asyncio.async_session(session)

返回 AsyncSession 它代理给定的 Session 对象(如果有)。

参数

session -- 一个 Session 实例。

返回

一个 AsyncSession 实例,或 None

1.4.18 新版功能.

class sqlalchemy.ext.asyncio.async_scoped_session(session_factory, scopefunc)

提供范围内的管理 AsyncSession 对象。

请参阅部分 使用异步作用域会话 有关用法详细信息,请参阅。

1.4.19 新版功能.

类签名

class sqlalchemy.ext.asyncio.async_scoped_session (sqlalchemy.orm.scoping.ScopedSessionMixin)

method 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 都被养大了。

method 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 在这里可能有用。

method sqlalchemy.ext.asyncio.async_scoped_session.add(instance, _warn=True)

将对象放置在 Session .

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

它的状态将在下次刷新操作时保留到数据库中。

重复呼叫 add() 将被忽略。相反的 add()expunge() .

method sqlalchemy.ext.asyncio.async_scoped_session.add_all(instances)

将给定的实例集合添加到此 Session .

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

attribute sqlalchemy.ext.asyncio.async_scoped_session.autoflush

代理用于 AsyncSession 类代表 async_scoped_session 班级。

method 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() .

method sqlalchemy.ext.asyncio.async_scoped_session.begin_nested(**kw)

返回一 AsyncSessionTransaction 对象,它将开始一个“嵌套”事务,例如SAVEPOINT。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

行为与 AsyncSession.begin() .

有关ORM begin nested的一般说明,请参阅 Session.begin_nested() .

method 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()

method sqlalchemy.ext.asyncio.async_scoped_session.classmethod close_all()

全部关闭 AsyncSession 会议。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

method sqlalchemy.ext.asyncio.async_scoped_session.commit()

提交当前正在进行的事务。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

method sqlalchemy.ext.asyncio.async_scoped_session.configure(**kwargs)

inherited from the ScopedSessionMixin.configure() method of ScopedSessionMixin

重新配置 sessionmaker 由此使用 scoped_session

看见 sessionmaker.configure()

method sqlalchemy.ext.asyncio.async_scoped_session.connection(**kw)

返回A AsyncConnection 与此对应的对象 Session 对象的事务状态。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

此方法还可用于为当前事务使用的数据库连接建立执行选项。

1.4.24 新版功能: 添加了**kw参数,这些参数将传递到基础 Session.connection() 方法。

参见

Session.connection() -“连接”的主要文档

method sqlalchemy.ext.asyncio.async_scoped_session.delete(instance)

将实例标记为已删除。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

数据库删除操作发生在 flush() .

由于此操作可能需要沿着卸载的关系级联,因此允许发生这些查询是可以等待的。

参见

Session.delete() -删除的主要文档

attribute sqlalchemy.ext.asyncio.async_scoped_session.deleted

此中标记为“已删除”的所有实例的集合 Session

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

attribute sqlalchemy.ext.asyncio.async_scoped_session.dirty

所有持久实例的集合被认为是脏的。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

例如。::

some_mapped_object in session.dirty

实例在被修改但未被删除时被视为脏实例。

请注意,此“脏”计算是“乐观的”;大多数属性设置或集合修改操作都会将实例标记为“脏”并将其放置在此集合中,即使属性值没有净更改。在刷新时,将每个属性的值与以前保存的值进行比较,如果没有净更改,则不会发生SQL操作(这是一个更昂贵的操作,因此只在刷新时进行)。

要检查实例是否对其属性进行了可操作的网络更改,请使用 Session.is_modified() 方法。

method sqlalchemy.ext.asyncio.async_scoped_session.execute(statement, params=None, execution_options={}, bind_arguments=None, **kw)

执行语句并返回缓冲区 Result 对象。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

参见

Session.execute() -执行的主要文档

method 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语句的特定情况下才有意义。

参数
  • instance -- 要刷新的实例。

  • attribute_names -- 指示要过期的属性子集的字符串属性名称的可选列表。

method 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 ,假设事务是独立的。

method sqlalchemy.ext.asyncio.async_scoped_session.expunge(instance)

移除 instance 由此 Session .

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

这将释放对该实例的所有内部引用。将根据 删去 级联规则。

method sqlalchemy.ext.asyncio.async_scoped_session.expunge_all()

从此中删除所有对象实例 Session .

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

这相当于呼叫 expunge(obj) 在所有对象上 Session .

method sqlalchemy.ext.asyncio.async_scoped_session.flush(objects=None)

将所有对象更改刷新到数据库。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

参见

Session.flush() -同花顺的主要文档

method 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的主要文档

method 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 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 提供任何类型的绑定解决方案。参见中的示例 自定义垂直分区 .

参数
method sqlalchemy.ext.asyncio.async_scoped_session.classmethod identity_key(*args, **kwargs)

返回标识密钥。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

这是的别名 identity_key() .

attribute sqlalchemy.ext.asyncio.async_scoped_session.identity_map

代理用于 AsyncSession 类代表 async_scoped_session 班级。

attribute sqlalchemy.ext.asyncio.async_scoped_session.info

用户可修改字典。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

此字典的初始值可以使用 info 论据 Session 构造函数或 sessionmaker 构造函数或工厂方法。这里的字典总是本地的 Session 并且可以独立于所有其他 Session 物体。

attribute sqlalchemy.ext.asyncio.async_scoped_session.is_active

如果这是真的 Session 不处于“部分回滚”状态。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

在 1.4 版更改: 这个 Session 不再立即开始新事务,因此当 Session 首先实例化。

“部分回滚”状态通常表示 Session 已经失败了 Session.rollback() 方法才能完全回滚事务。

如果这样 Session 根本不在事务中 Session 第一次使用时会自动注册,所以在本例中 Session.is_active 将返回true。

否则,如果 Session 在事务中,并且该事务尚未在内部回滚,则 Session.is_active 也将返回True。

method 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() .

参数
  • instance -- 要测试的映射实例是否存在挂起的更改。

  • include_collections -- 指示操作中是否应包含多值集合。设置为 False 是一种只检测本地基于列的属性(即标量列或多对一外键)的方法,在刷新时将导致此实例的更新。

method sqlalchemy.ext.asyncio.async_scoped_session.merge(instance, load=True, options=None)

将给定实例的状态复制到 AsyncSession .

代理用于 AsyncSession 类代表 async_scoped_session 班级。

参见

Session.merge() -合并的主要文档

attribute sqlalchemy.ext.asyncio.async_scoped_session.new

在此中标记为“new”的所有实例的集合 Session .

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

attribute 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: 块不会受到查询访问时发生的刷新的影响。这在初始化涉及现有数据库查询的一系列对象时很有用,因为在这些对象中,尚未完成的对象尚未刷新。

method sqlalchemy.ext.asyncio.async_scoped_session.classmethod object_session(instance)

返回 Session 对象所属的。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

代表 Session 代表 AsyncSession 班级。

这是的别名 object_session() .

method sqlalchemy.ext.asyncio.async_scoped_session.refresh(instance, attribute_names=None, with_for_update=None)

使给定实例上的属性过期并刷新。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

将向数据库发出一个查询,所有属性都将使用其当前数据库值进行刷新。

这是的异步版本 Session.refresh() 方法。有关所有选项的完整描述,请参见该方法。

参见

Session.refresh() -更新的主要文档

async method sqlalchemy.ext.asyncio.async_scoped_session.remove()

处理掉当前的 AsyncSession ,如果存在。

与SCOPED_SESSION的REMOVE方法不同,此方法将使用AWAIT等待AsyncSession的Close方法。

method sqlalchemy.ext.asyncio.async_scoped_session.rollback()

回滚正在进行的当前事务。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

method sqlalchemy.ext.asyncio.async_scoped_session.scalar(statement, params=None, execution_options={}, bind_arguments=None, **kw)

执行语句并返回标量结果。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

参见

Session.scalar() -标量的主要文档

method sqlalchemy.ext.asyncio.async_scoped_session.scalars(statement, params=None, execution_options={}, bind_arguments=None, **kw)

执行语句并返回标量结果。

代理用于 AsyncSession 类代表 async_scoped_session 班级。

返回

一个 ScalarResult 对象

1.4.24 新版功能.

参见

Session.scalars() -标量的主要文档

AsyncSession.stream_scalars() -流媒体版本

method sqlalchemy.ext.asyncio.async_scoped_session.stream(statement, params=None, execution_options={}, bind_arguments=None, **kw)

代理用于 AsyncSession 类代表 async_scoped_session 班级。

执行语句并返回流 AsyncResult 对象。

method 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.scalars() -标量的主要文档

AsyncSession.scalars() -非流版本

class sqlalchemy.ext.asyncio.AsyncSession(bind=None, binds=None, sync_session_class=None, **kw)

的异步版本 Session .

这个 AsyncSession 是传统的 Session 实例。

1.4 新版功能.

要使用 AsyncSession 带自定义 Session 实现,请参阅 AsyncSession.sync_session_class 参数。

类签名

class sqlalchemy.ext.asyncio.AsyncSession (sqlalchemy.ext.asyncio.base.ReversibleProxy)

attribute sqlalchemy.ext.asyncio.AsyncSession.sync_session_class = <class 'sqlalchemy.orm.session.Session'>

类或可调用类,该类或可调用类提供基础 Session 实例为特定的 AsyncSession

在类级别,此属性是 AsyncSession.sync_session_class 参数。的自定义子类 AsyncSession 可以覆盖此设置。

在实例级别,此属性指示用于提供 Session 此实例的 AsyncSession 实例。

1.4.24 新版功能.

method 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

method sqlalchemy.ext.asyncio.AsyncSession.add(instance, _warn=True)

将对象放置在 Session .

代表 Session 代表 AsyncSession 班级。

它的状态将在下次刷新操作时保留到数据库中。

重复呼叫 add() 将被忽略。相反的 add()expunge() .

method sqlalchemy.ext.asyncio.AsyncSession.add_all(instances)

将给定的实例集合添加到此 Session .

代表 Session 代表 AsyncSession 班级。

method 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() .

method sqlalchemy.ext.asyncio.AsyncSession.begin_nested(**kw)

返回一 AsyncSessionTransaction 对象,它将开始一个“嵌套”事务,例如SAVEPOINT。

行为与 AsyncSession.begin() .

有关ORM begin nested的一般说明,请参阅 Session.begin_nested() .

async method 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()

method sqlalchemy.ext.asyncio.AsyncSession.async classmethod close_all()

全部关闭 AsyncSession 会议。

async method sqlalchemy.ext.asyncio.AsyncSession.commit()

提交当前正在进行的事务。

async method sqlalchemy.ext.asyncio.AsyncSession.connection(**kw)

返回A AsyncConnection 与此对应的对象 Session 对象的事务状态。

此方法还可用于为当前事务使用的数据库连接建立执行选项。

1.4.24 新版功能: 添加了**kw参数,这些参数将传递到基础 Session.connection() 方法。

参见

Session.connection() -“连接”的主要文档

async method sqlalchemy.ext.asyncio.AsyncSession.delete(instance)

将实例标记为已删除。

数据库删除操作发生在 flush() .

由于此操作可能需要沿着卸载的关系级联,因此允许发生这些查询是可以等待的。

参见

Session.delete() -删除的主要文档

attribute sqlalchemy.ext.asyncio.AsyncSession.deleted

此中标记为“已删除”的所有实例的集合 Session

代表 Session 代表 AsyncSession 班级。

attribute sqlalchemy.ext.asyncio.AsyncSession.dirty

所有持久实例的集合被认为是脏的。

代表 Session 代表 AsyncSession 班级。

例如。::

some_mapped_object in session.dirty

实例在被修改但未被删除时被视为脏实例。

请注意,此“脏”计算是“乐观的”;大多数属性设置或集合修改操作都会将实例标记为“脏”并将其放置在此集合中,即使属性值没有净更改。在刷新时,将每个属性的值与以前保存的值进行比较,如果没有净更改,则不会发生SQL操作(这是一个更昂贵的操作,因此只在刷新时进行)。

要检查实例是否对其属性进行了可操作的网络更改,请使用 Session.is_modified() 方法。

async method sqlalchemy.ext.asyncio.AsyncSession.execute(statement, params=None, execution_options={}, bind_arguments=None, **kw)

执行语句并返回缓冲区 Result 对象。

参见

Session.execute() -执行的主要文档

method 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语句的特定情况下才有意义。

参数
  • instance -- 要刷新的实例。

  • attribute_names -- 指示要过期的属性子集的字符串属性名称的可选列表。

method sqlalchemy.ext.asyncio.AsyncSession.expire_all()

使此会话中的所有永久实例过期。

代表 Session 代表 AsyncSession 班级。

下次访问持久实例上的任何属性时,将使用 Session 对象的当前事务上下文,以便加载给定实例的所有过期属性。请注意,高度隔离的事务将返回与以前在同一事务中读取的值相同的值,而不考虑该事务外数据库状态的更改。

要使这些对象上的单个对象和单个属性过期,请使用 Session.expire() .

这个 Session 对象的默认行为是在 Session.rollback()Session.commit() 方法,以便可以为新事务加载新状态。为此,请致电 Session.expire_all() 当自动提交为 False ,假设事务是独立的。

method sqlalchemy.ext.asyncio.AsyncSession.expunge(instance)

移除 instance 由此 Session .

代表 Session 代表 AsyncSession 班级。

这将释放对该实例的所有内部引用。将根据 删去 级联规则。

method sqlalchemy.ext.asyncio.AsyncSession.expunge_all()

从此中删除所有对象实例 Session .

代表 Session 代表 AsyncSession 班级。

这相当于呼叫 expunge(obj) 在所有对象上 Session .

async method sqlalchemy.ext.asyncio.AsyncSession.flush(objects=None)

将所有对象更改刷新到数据库。

参见

Session.flush() -同花顺的主要文档

async method sqlalchemy.ext.asyncio.AsyncSession.get(entity, ident, options=None, populate_existing=False, with_for_update=None, identity_token=None)

根据给定的主键标识符返回实例,或者 None 如果找不到的话。

参见

Session.get() -GET的主要文档

method 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 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 提供任何类型的绑定解决方案。参见中的示例 自定义垂直分区 .

参数
method sqlalchemy.ext.asyncio.AsyncSession.get_nested_transaction()

返回当前正在进行的嵌套事务(如果有)。

返回

一个 AsyncSessionTransaction 对象,或 None

1.4.18 新版功能.

method sqlalchemy.ext.asyncio.AsyncSession.get_transaction()

返回正在进行的当前根事务(如果有)。

返回

一个 AsyncSessionTransaction 对象,或 None

1.4.18 新版功能.

method sqlalchemy.ext.asyncio.AsyncSession.classmethod identity_key(*args, **kwargs)

返回标识密钥。

代表 Session 代表 AsyncSession 班级。

这是的别名 identity_key() .

method sqlalchemy.ext.asyncio.AsyncSession.in_nested_transaction()

如果出现以下情况,则返回True Session 已开始嵌套事务,例如保存点。

代表 Session 代表 AsyncSession 班级。

1.4 新版功能.

method sqlalchemy.ext.asyncio.AsyncSession.in_transaction()

如果出现以下情况,则返回True Session 已经开始了一项交易。

代表 Session 代表 AsyncSession 班级。

1.4 新版功能.

attribute sqlalchemy.ext.asyncio.AsyncSession.info

用户可修改字典。

代表 Session 代表 AsyncSession 班级。

此字典的初始值可以使用 info 论据 Session 构造函数或 sessionmaker 构造函数或工厂方法。这里的字典总是本地的 Session 并且可以独立于所有其他 Session 物体。

attribute sqlalchemy.ext.asyncio.AsyncSession.is_active

如果这是真的 Session 不处于“部分回滚”状态。

代表 Session 代表 AsyncSession 班级。

在 1.4 版更改: 这个 Session 不再立即开始新事务,因此当 Session 首先实例化。

“部分回滚”状态通常表示 Session 已经失败了 Session.rollback() 方法才能完全回滚事务。

如果这样 Session 根本不在事务中 Session 第一次使用时会自动注册,所以在本例中 Session.is_active 将返回true。

否则,如果 Session 在事务中,并且该事务尚未在内部回滚,则 Session.is_active 也将返回True。

method 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() .

参数
  • instance -- 要测试的映射实例是否存在挂起的更改。

  • include_collections -- 指示操作中是否应包含多值集合。设置为 False 是一种只检测本地基于列的属性(即标量列或多对一外键)的方法,在刷新时将导致此实例的更新。

async method sqlalchemy.ext.asyncio.AsyncSession.merge(instance, load=True, options=None)

将给定实例的状态复制到 AsyncSession .

参见

Session.merge() -合并的主要文档

attribute sqlalchemy.ext.asyncio.AsyncSession.new

在此中标记为“new”的所有实例的集合 Session .

代表 Session 代表 AsyncSession 班级。

attribute 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: 块不会受到查询访问时发生的刷新的影响。这在初始化涉及现有数据库查询的一系列对象时很有用,因为在这些对象中,尚未完成的对象尚未刷新。

method sqlalchemy.ext.asyncio.AsyncSession.classmethod object_session(instance)

返回 Session 对象所属的。

代表 Session 代表 AsyncSession 班级。

这是的别名 object_session() .

async method sqlalchemy.ext.asyncio.AsyncSession.refresh(instance, attribute_names=None, with_for_update=None)

使给定实例上的属性过期并刷新。

将向数据库发出一个查询,所有属性都将使用其当前数据库值进行刷新。

这是的异步版本 Session.refresh() 方法。有关所有选项的完整描述,请参见该方法。

参见

Session.refresh() -更新的主要文档

async method sqlalchemy.ext.asyncio.AsyncSession.rollback()

回滚正在进行的当前事务。

async method 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上下文。

async method sqlalchemy.ext.asyncio.AsyncSession.scalar(statement, params=None, execution_options={}, bind_arguments=None, **kw)

执行语句并返回标量结果。

参见

Session.scalar() -标量的主要文档

async method sqlalchemy.ext.asyncio.AsyncSession.scalars(statement, params=None, execution_options={}, bind_arguments=None, **kw)

执行语句并返回标量结果。

返回

一个 ScalarResult 对象

1.4.24 新版功能.

参见

Session.scalars() -标量的主要文档

AsyncSession.stream_scalars() -流媒体版本

async method sqlalchemy.ext.asyncio.AsyncSession.stream(statement, params=None, execution_options={}, bind_arguments=None, **kw)

执行语句并返回流 AsyncResult 对象。

async method sqlalchemy.ext.asyncio.AsyncSession.stream_scalars(statement, params=None, execution_options={}, bind_arguments=None, **kw)

执行语句并返回标量结果流。

返回

一个 AsyncScalarResult 对象

1.4.24 新版功能.

参见

Session.scalars() -标量的主要文档

AsyncSession.scalars() -非流版本

attribute sqlalchemy.ext.asyncio.AsyncSession.sync_session: sqlalchemy.orm.session.Session

对基础的 SessionAsyncSession 代理请求指向。

此实例可以用作事件目标。

class sqlalchemy.ext.asyncio.AsyncSessionTransaction(session, nested=False)

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)

async method sqlalchemy.ext.asyncio.AsyncSessionTransaction.commit()

提交此 AsyncTransaction .

async method sqlalchemy.ext.asyncio.AsyncSessionTransaction.rollback()

回滚这个 AsyncTransaction .

Previous: ORM扩展 Next: 关联代理