我有一个 Python 脚本,它从用户那里获取一个名称列表,创建一个 SQL 查询字符串,然后查询数据库并将数据放入使用pandas.read_sql()
方法的数据框中。但是,我注意到如果我要查询的人的列表非常长,我的代码永远不会到达后面的行pandas.read_sql()
,并且由于某种原因,没有捕获到异常。
我的查询字符串如下所示:
SELECT * FROM table1 WHERE
table1.name = 'Alice' OR
table1.name = 'Bob' OR
table1.name = 'Charlie' OR ...
其中可能包含数百个名称。
我使用的 Python 代码如下所示:
query_string = construct_string_above(names_list)
pymongoConnection = ...
try:
print("Trying")
df = pandas.read_sql(query_string, pymongoConnection)
except Exception as ex:
print(ex)
traceback.print_exc()
sys.exit(0)
print("Finishing")
我的代码总是执行到 try 块。该程序打印“尝试”,但从不打印“完成”,也不会返回任何错误。我检查了,pymongoConnection
对象是正确的。我还尝试query_string
在 MySQL 中手动执行它,它可以工作。
问题一定出在pandas.read_sql()
甚至这里,只有当查询字符串的大小超过某个阈值时才会出现问题,否则代码会正确完成。是否有使用限制pandas.read_sql()
,例如输入字符串的最大大小或最大WHERE
子句或返回数据帧的最大数据量?因为我想不出任何其他可能导致问题的东西。