我需要从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。
我做错了什么?提前谢谢你的帮助!
1条答案
按热度按时间ee7vknir1#
该错误实际上意味着错误跟踪太长,see also this issue
在命令行中尝试
python filename.py 2> err.log
以捕获错误。因为你的错误跟踪很长,我猜你的WHERE子句也很长。你试过增加max_allowed_packet吗?例如在你的配置文件中: