You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLAlchemy 2.0查询MariaDB时触发Python崩溃(_PyMem_DebugRawFree)

Python崩溃问题求助:SQLAlchemy 2.0 + MariaDB Connector环境下的内存错误

我的应用在SQLAlchemy 1.4、MariaDB Connector 1.4、Python 3.10环境下运行正常。迁移到SQLAlchemy 2.0适配ORM后,在以下环境出现Python崩溃:

  • SQLAlchemy 2.0.23
  • MariaDB Connector 1.1.8
  • Python 3.12.0
  • MariaDB 11.1(含10.4)
  • Windows 10 x64 22H2

更新

感谢Gord Thompson的提示,切换到PyMySQL连接器后代码可正常运行,因此问题大概率出在MariaDB Connector上。

对应表结构

CREATE TABLE `accounts` (
    `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(40) NOT NULL COLLATE 'utf8mb3_general_ci',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE INDEX `name` (`name`) USING BTREE
)

测试代码

执行以下代码时,Python在MariaDB Connector内部崩溃:

db = 'mariadb+mariadbconnector://***:***@localhost/test'
engine = sa.create_engine(db)
Session = orm.sessionmaker(bind=engine)
class Base(orm.DeclarativeBase):
   pass

class Account(Base):
   __tablename__ = 'accounts'

   _id: orm.Mapped[int] = orm.mapped_column('id', sa.Integer, primary_key=True)
   _name: orm.Mapped[str] = orm.mapped_column('name', sa.String)


with Session() as sess:
   sel = sa.select(Account) \
      .where(Account._name == 'My Account')
   res = sess.execute(sel).scalars()
   for acc in res:
      print(acc._name)

错误日志

调用sess.execute时出现如下输出:

C:\Users\Jens\Projects\Mails\Python> c: && cd c:\Users\Jens\Projects\Mails\Python && cmd /C ""C:\Program Files\Python\Python312\python.exe" c:\Users\Jens\.vscode\extensions\ms-python.python-2023.20.0\pythonFiles\lib\python\debugpy\adapter/../../debugpy\launcher 50504 -- C:\Users\Jens\Projects\Mails\Python\test.py "
Debug memory block at address p=000001BDB62F37D0: API 'r'
    15 bytes originally requested
    The 7 pad bytes at p-7 are FORBIDDENBYTE, as expected.
    The 8 pad bytes at tail=000001BDB62F37DF are FORBIDDENBYTE, as expected.
    Data at p: 39 31 30 30 33 38 35 00 00 00 00 00 00 00 00

Enable tracemalloc to get the memory block allocation traceback

Fatal Python error: _PyMem_DebugRawFree: bad ID: Allocated using API 'r', verified using API 'm'
Python runtime state: initialized

[...]

Current thread 0x00000edc (most recent call first):
  File "C:\Program Files\Python\Python312\Lib\site-packages\mariadb\cursors.py", line 135 in _substitute_parameters
  File "C:\Program Files\Python\Python312\Lib\site-packages\mariadb\cursors.py", line 306 in execute
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\engine\default.py", line 922 in do_execute
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1969 in _exec_single_context
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1848 in _execute_context
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1639 in _execute_clauseelement
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\sql\elements.py", line 516 in _execute_on_connection
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1416 in execute
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\orm\context.py", line 293 in orm_execute_statement
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\orm\session.py", line 2190 in _execute_internal
  File "C:\Program Files\Python\Python312\Lib\site-packages\sqlalchemy\orm\session.py", line 2308 in execute
  File "C:\Users\Jens\Projects\Mails\Python\test.py", line 22 in <module>
[...]

Extension modules: _wmi, sqlalchemy.cyextension.collections, sqlalchemy.cyextension.immutabledict, sqlalchemy.cyextension.processors, sqlalchemy.cyextension.resultproxy, sqlalchemy.cyextension.util, greenlet._greenlet, mariadb._mariadb (total: 8)

补充说明

如果省略SQL语句中的.where子句,代码可正常运行。恳请各位提供帮助。

内容的提问来源于stack exchange,提问作者JensS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:08:10