mariadb SQLAlchemy查询执行抛出“超出最大调用堆栈大小”错误

9o685dep  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(107)

我需要从MariaDB表中选择具有特定id的行。为此,我用Python中的SQLAlchemy创建了以下查询和执行代码:

stmt = (
    select(transactions_table).
    where(transactions_table.c.id.in_(df['transaction_id'].to_list()))
)

data_db = pd.read_sql(stmt, engine)

对应的transactions_table对象如下所示:

transactions_table = Table(
    'transactions',
    metadata_obj,
    Column('id', String(8), primary_key=True),
    Column('issuer_id', ForeignKey('affiliates.id')),
    Column('mop_id', ForeignKey('mop.id')),
    Column('station_id', ForeignKey('stations.id')),
    Column('product_id', ForeignKey('products.id')),
    Column('transaction_time', DateTime),
    Column('contract_id', ForeignKey('contracts.id')),
    Column('quantity', Float),
    Column('displayed_turnover', Float),
    Column('applied_turnover', Float),
    Column('invoiced_turnover', Float),
    Column('invoice_id', ForeignKey('invoices.id'))
)

奇怪的是,直到几天前,这还能正常工作,而现在我却收到了以下错误:

Error loading preloads:
Maximum call stack size exceeded

当我从查询中删除where条件时,查询仍然运行,没有任何问题,并按预期返回数据库中的所有行。
最大堆栈大小(sys.getrecursionlimit())被设置为3,000。我尝试增加它,但错误仍然存在。
我搜索了整个谷歌和StackOverflow,但没有发现任何类似的问题,结合SQLAlchemy。
我做错了什么?提前谢谢你的帮助!

ee7vknir

ee7vknir1#

该错误实际上意味着错误跟踪太长,see also this issue
在命令行中尝试python filename.py 2> err.log以捕获错误。
因为你的错误跟踪很长,我猜你的WHERE子句也很长。你试过增加max_allowed_packet吗?例如在你的配置文件中:

[mysqld]

max_allowed_packet = 100M

相关问题