该实现是方言特定的,并且利用特定于 DBAPI 的 ping 方法,或者使用简单的 SQL 语句如“SELECT 1”,以便测试连接的活动性。...("mysql+pymysql://user:pw@host/db", pool_pre_ping=True) “预 ping”功能根据每个方言的基础,通过调用特定于 DBAPI 的“ping”方法,或者如果不可用...池预 ping 功能时捕获的错误,用于依赖于断开错误处理的后端(在 2.0 中新增)。...该实现是方言特定的,可以使用特定于 DBAPI 的 ping 方法,也可以使用简单的 SQL 语句如“SELECT 1”来测试连接的活动性。...= create_engine("mysql+pymysql://user:pw@host/db", pool_pre_ping=True) “预连接”功能是在每个方言基础上运行的,通过调用特定于 DBAPI
在使用 Engine 时,如何获取原始的 DBAPI 连接? 如何在 Python 多进程或 os.fork() 中使用引擎 / 连接 / 会话?...SQLAlchemy 在大多数情况下会自动执行应用程序级别的连接池。对于所有包含的方言(除了使用“内存”数据库的 SQLite),Engine 对象指的是一个 QueuePool 作为连接的来源。...因此,SQLAlchemy 没有一个能在事务进行中工作时透明地进行“重新连接”的功能,以处理数据库连接在使用过程中断开的情况。...value % two" FROM my_table 另一种方法是在使用的方言上设置不同的参数样式;所有 Dialect 实现都接受一个参数 paramstyle,将导致该方言的编译器使用给定的参数样式...下面,非常常见的named参数样式在用于编译的方言中设置,以便百分号在 SQL 的编译形式中不再重要,并且不再被转义: >>> print(t.select().compile(dialect=postgresql.dialect
方言特性已重新设计,使得所有方言都参与事件处理。另外,添加了一个新的布尔元素 ExceptionContext.is_pre_ping,用于标识此操作是否在预 ping 操作中进行。...“预 ping”事件,对于那些使用断开代码来检测数据库是否存活的方言。...这使得最终用户代码能够更改“预 ping”的状态。请注意,这不包括包含本地“ping”方法的方言,如 psycopg2 或大多数 MySQL 方言。...该参数最初旨在在 SQLAlchemy 首次开发时启用“implicit returning”功能,但默认情况下未启用。...现在,所有 PostgreSQL 方言都使用 PostgreSQL 双冒号样式在编译器内呈现这些转换所需的转换,并且对于 PostgreSQL 方言,已删除了使用setinputsizes(),因为这在任何情况
这里的最终用户功能扩展通常应通过TypeDecorator完成,它提供更自由的行为,因为它默认将表达式的另一侧强制转换为此类型,从而应用特殊的 Python 转换,超出了 DBAPI 所需的范围。...另请参见 配置日志记录 - 关于如何配置日志记录的更多细节。 pool_pre_ping – 布尔值,如果为 True,则启用连接池的“预检”功能,即在每次检出时测试连接的活动性。...设置每个连接/子引擎令牌 1.4.0b2 版本中的新功能。...另请参阅 配置日志记录 - 关于如何配置日志记录的更多详细信息。 pool_pre_ping – 如果为 True,则启用连接池“预检”功能,该功能在每次检出时测试连接的活动性。...使用 LIFO,服务器端的超时方案可以在非高峰使用期间减少使用的连接数。在规划服务器端超时时,请确保使用回收或预先 ping 策略以优雅地处理陈旧的连接。 版本 1.3 中的新功能。
从 SQLAlchemy 2.0 开始,使用 create_engine.pool_pre_ping 参数启用的“pre_ping”处理程序也将参与 handle_error() 过程,对于那些依赖断开连接代码来检测数据库活动性的方言...请注意,一些方言,如 psycopg、psycopg2 和大多数 MySQL 方言,使用由 DBAPI 提供的本地 ping() 方法,该方法不使用断开连接代码。...此钩子支持的用例包括: 用于记录和调试目的的只读低级异常处理 确定 DBAPI 连接错误消息是否表明需要重新连接数据库,包括一些方言中使用的“pre_ping”处理程序 确定或禁用特定异常响应中连接或拥有的连接池是否无效或过期...自 SQLAlchemy 2.0 起,使用 create_engine.pool_pre_ping 参数启用的“pre_ping”处理程序也将参与 handle_error() 过程,对于依赖于断开连接代码来检测数据库存活性的那些方言...请注意,某些方言,如 psycopg、psycopg2 和大多数 MySQL 方言,使用由 DBAPI 提供的本机 ping() 方法,该方法不使用断开连接代码。
当前的方言将此处理为基本类型中的长度“None”,而不是提供这些类型的方言特定版本,因此指定基本类型如 VARCHAR(None) 可以在不同的后端上假定“无长度”的行为而不使用方言特定的类型。...通过在 DBAPI 游标上设置属性 .fast_executemany 来启用此功能,当要使用 executemany 调用时。...该功能通过在要使用 executemany 调用时在 DBAPI 游标上设置属性.fast_executemany 来启用。...当要使用 executemany 调用时,在 DBAPI 游标上设置属性.fast_executemany即可启用此功能。...当要使用 executemany 调用时,在 DBAPI 游标上设置属性.fast_executemany即可启用此功能。
,在 Python 3 中以及使用现代测试工具如 Pytest 时,现在在标准错误流中更加明确。...#4237 方言改进和变更 - MySQL 协议级别的 ping 现在用于预 ping 包括 mysqlclient、python-mysql、PyMySQL 和 mysql-connector-python...在内的 MySQL 方言现在使用 connection.ping() 方法进行池预 ping 功能,详情请参阅 Disconnect Handling - Pessimistic。...在内的 MySQL 方言现在使用connection.ping()方法进行池预 ping 功能,详细信息请参见断开处理 - 悲观。...()方法进行池预 ping 功能,详细信息请参见断开处理 - 悲观。
对于支持多个后端的 DBAPI(如 pyodbc、zxJDBC、mxODBC),方言模块将使用来自 sqlalchemy.connectors 包的混合物,这些混合物提供了跨所有后端的该 DBAPI 的功能...如果在不支持级联的数据库上,如 SQLite 或 MySQL/MyISAM 上,将此标志设置为False。未来的功能增强将尝试根据使用的方言/表格样式自动配置此标志。...在 PostgreSQL 上,观察到这可以在某些查询中提供 300-600%的加速。为任何在 NOT NULLable 外键上的多对一关系设置此标志,类似地,为任何保证存在相关项的集合设置此标志。...如果在不支持级联的数据库上,如 SQLite 或 MySQL/MyISAM,则将此标志设置为 False。将来的功能增强将尝试根据正在使用的方言/表样式来自动配置此标志。...如果在不支持级联的数据库上,如 SQLite 或 MySQL/MyISAM 上,将此标志设置为False。未来的功能增强将尝试根据使用的方言/表样式自动配置此标志。
="AUTOCOMMIT" ) 对于 READ COMMITTED 和 SERIALIZABLE,Oracle 方言使用 ALTER SESSION 在会话级别设置级别,在连接返回到连接池时会恢复到默认设置...此参数不清晰地映射到特定数量的小数位数,但大致相当于所需小数位数除以 0.3103。 2.0 版中的新功能。...使用 cx_Oracle 会话池 cx_Oracle 库提供了自己的连接池实现,可以替代 SQLAlchemy 的池功能。...使用 cx_Oracle SessionPool cx_Oracle 库提供了自己的连接池实现,可以用来替代 SQLAlchemy 的连接池功能。...使用 cx_Oracle SessionPool cx_Oracle 库提供了自己的连接池实现,可以代替 SQLAlchemy 的池功能。
现在,当与适当的方言一起使用时,此配方的功能已添加到连接池本身中。...该功能默认关闭,可以通过在 create_engine() 上使用 use_batch_mode 参数来启用: engine = create_engine( "postgresql+psycopg2...现在,当与适当的方言一起使用时,此示例的功能已添加到连接池本身中。...现在,当与适当的方言一起使用时,此配方的功能已经添加到连接池本身中。...pool_pre_ping=True) 虽然“预检”方法会在连接池检出时增加一小部分延迟,但对于典型的面向事务的应用程序(其中包括大多数 ORM 应用程序),这种开销是很小的,并且消除了获取到一个过时连接会引发错误的问题
,也要受到“条件”规则的约束,例如一个索引包含特定于特定后端(如 PostgreSQL 或 SQL Server)的功能。...SQLAlchemy ORM 要求映射的主键列必须以某种方式可排序。当使用不可排序的枚举对象,如 Python 3 的 Enum 对象时,可以使用此参数为对象设置默认的排序键函数。...SQLAlchemy ORM 要求映射的主键列必须以某种方式可排序。当使用不可排序的枚举对象,如 Python 3 的 Enum 对象时,可以使用此参数为对象设置默认排序键函数。...针对特定数据库方言的版本可能提供额外的操作,例如 JSON 的特定于数据库方言的版本,如 sqlalchemy.dialects.postgresql.JSON 和 sqlalchemy.dialects.postgresql.JSONB...TIMESTAMP数据类型在一些后端(如 PostgreSQL 和 Oracle)上支持时区存储。使用TIMESTAMP.timezone参数以启用这些后端的“带时区的 TIMESTAMP”。
特别是,这些钩子在很大程度上无法使用,因为这些事件中的行为契约与周围内部紧密相关,例如实例如何需要被创建和初始化以及列如何在 ORM 生成的行中定位。...特别是,这些钩子在很大程度上无法使用,因为这些事件中的行为契约与周围内部的强烈联系,例如需要如何创建和初始化实例以及如何在 ORM 生成的行中定位列。...特别是,这些钩子在很大程度上无法使用,因为这些事件内部的行为约定与周围内部的密切联系,比如实例需要如何创建和初始化以及如何在 ORM 生成的行中定位列。...另请参阅 右嵌套内连接可用于连接式预加载 - 在 0.9.4 版本中引入的功能的描述。...为了处理实际希望在其可能值列表中包含空值''的集合类型的情况,实现了一个新特性(在此用例中需要),即集合值被持久化并作为位整数值加载;添加了标志SET.retrieve_as_bitwise以启用此功能
在使用第三方方言时,请与方言的维护者协商,以便他们可以遵循 确保可以启用缓存的步骤 并发布新版本。...在使用第三方方言时,请咨询方言的维护人员,以便他们遵循确保可以启用缓存的步骤并发布新版本。...这个过程在内部是复杂的,并且不支持所有 API 功能,特别是当尝试在比这里展示的更深度嵌套查询中使用急加载功能时,如contains_eager()。...在使用第三方方言时,请与方言的维护者协商,以便他们遵循确保可以启用缓存的步骤并发布新版本。...使用第三方方言时,请咨询方言的维护者,以便他们可以按照确保可以启用缓存的步骤进行操作,并发布一个新的版本。
虽然原始功能对于 psycopg2 驱动程序最为关键,否则在使用cursor.executemany()时会有严重的性能问题,但该变更对于其他 PostgreSQL 驱动程序如 asyncpg 同样关键...SQLAlchemy 在历史上一直需要为每个参数集调用一个语句,因为它依赖于 Python DBAPI 功能,如cursor.lastrowid,这些功能不支持多行。...SQLAlchemy 当前的集成方法将用户定义的类转换为真实数据类以提供运行时功能;该特性利用了 SQLAlchemy 1.4 中引入的现有数据类功能,在 Python 数据类,支持 attrs w/声明性...虽然原始功能对于 psycopg2 驱动程序至关重要,否则在使用 cursor.executemany() 时存在严重的性能问题,但对于其他 PostgreSQL 驱动程序,如 asyncpg,此更改也至关重要...;相反,使用 SQL 构造方法,如 WriteOnlyCollection.select() 来生成 SQL 构造,比如 Select,然后使用 2.0 风格 显式加载所需对象: account_transactions
为了识别这种变化,当这些异常发生在连接执行工作过程中时,很容易展示一个 pymysql 或 mysqlclient / MySQL-Python 连接进入损坏状态;连接将被返回到连接池,随后的使用将失败...SQLAlchemy 一直具有为单列整数主键启用后端数据库的“自增”功能的便利特性;通过“自增”,我们指的是数据库列将包括数据库提供的任何 DDL 指令,以指示自增整数标识符,例如 PostgreSQL...如 ARRAY 和 JSON 类型现在正确指定“不可哈希” 中描述的那样,现在这个标志已经一致地设置在了所有 PostgreSQL 的“结构”类型上。...另请参见 没有方言的核心 SQL 结构的“友好”字符串化 #3081 在一行中多次出现相同实体的连接式预加载 已对通过连接式预加载加载属性的情况进行了修复,即使实体已经从不包括属性的不同“路径”上的行加载...SQLAlchemy 一直以来都有一个方便的特性,即为单列整数主键启用后端数据库的“自增”功能;所谓的“自增”,是指数据库列将包含任何 DDL 指令,以指示自增长整数标识符,例如在 PostgreSQL
为自定义构造启用缓存支持 截至版本 1.4,SQLAlchemy 包括一个 SQL 编译缓存功能,它将允许等效的 SQL 构造缓存它们的字符串形式,以及用于从语句获取结果的其他结构信息。...遗留功能 序列化器扩展是遗留的,不应用于新开发。 可以使用任何 SQLAlchemy 查询结构,无论是基于 sqlalchemy.sql.* 还是 sqlalchemy.orm.*。...另请参阅 为自定义构造启用缓存支持 - 设置第三方或用户定义的 SQL 构造的 HasCacheKey.inherit_cache 属性的一般指南。...另请参阅 为自定义构造启用缓存支持 - 设置第三方或用户定义的 SQL 构造的 HasCacheKey.inherit_cache 属性的通用指南。...版本 1.4 中的新功能。
仅对支持此方法的 DBAPIs 实现了此功能,并且对于 SQLAlchemy 方言已经设置了适当的基础架构的情况下才实现了。...默认方言将此默认设置为 1000。 2.0 版本中的新功能。...2.0 版本中的更改:- 通过将 Dialect.bind_typing 设置为 BindTyping.SETINPUTSIZES 来启用 setinputsizes 模式。...默认方言将此默认值设置为 1000。 2.0 版本中的新功能。...此钩子目前仅由 insertmanyvalues 功能使用。不设置 use_insertmanyvalues=True 的方言不需要考虑此钩子。 版本 2.0.10 中的新功能。
有关 1.4 中的新内容的叙述性概述,请参阅 SQLAlchemy 1.4 有什么新功能?。...[mysql] [错误] 修复了 MySQL“预先 ping”例程中的新不兼容性,其中传递给connection.ping()的False参数,旨在禁用不需要的“自动重新连接”功能,在 MySQL 驱动程序和后端中已弃用...参考:#8995 orm [orm] [bug] 修复了用于 DML 语句(如 Update 和 Delete)的内部 SQL 遍历中的问题,该问题可能会导致与 ORM 更新/删除功能一起使用...另请参阅 使用服务器端游标(即流式结果) - 修订文档 [engine] [bug] 修复了Result中的错误,当使用缓冲结果策略时,如果使用的方言不支持显式的“服务器端游标”设置,则不会使用...当上下文管理器完成时,这似乎有助于使用其他并发库(如 anyio、uvloop)时取消任务时正确释放连接池中的连接。
然而,SQLite 的自动增量功能,无论是隐式还是显式启用,都要求列类型的名称正好是字符串"INTEGER"。...该类基于方言无关的 Insert 结构,可以使用 SQLAlchemy Core 中的 insert() 函数构造。...在其默认操作模式下,SQLite 的功能,如可序列化隔离、事务 DDL 和 SAVEPOINT 支持是不起作用的,为了使用这些功能,必须采取解决方法。...在其默认操作模式下,SQLite 的功能,如 SERIALIZABLE 隔离、事务 DDL 和 SAVEPOINT 支持是不起作用的,为了使用这些功能,必须采取解决方法。...在其默认操作模式下,SQLite 功能(如 SERIALIZABLE 隔离、事务性 DDL 和 SAVEPOINT 支持)是不起作用的,为了使用这些功能,必须采取一些变通方法。
,但这大大限制了“多”关系的功能,通常不是所需的。...数据库不能在进行中的事务中更改隔离级别,而一些 DBAPIs 和 SQLAlchemy 方言在这方面的行为不一致。 因此,最好使用一个提前绑定到具有所需隔离级别的引擎的Session。...数据库不能更改正在进行的事务的隔离级别,并且一些 DBAPIs 和 SQLAlchemy 方言在这个领域的行为不一致。 因此,最好使用一个与所需隔离级别的引擎直接绑定的Session。...数据库无法更改正在进行的事务的隔离级别,并且一些 DBAPI 和 SQLAlchemy 方言在这个领域的行为不一致。 因此最好使用一个最初绑定到具有所需隔离级别的引擎的 Session。...数据库无法更改正在进行的事务的隔离级别,并且一些 DBAPI 和 SQLAlchemy 方言在这个领域的行为不一致。 因此,最好使用一个明确绑定到具有所需隔离级别的引擎的 Session。
领取专属 10元无门槛券
手把手带您无忧上云