当数据框中的值(RxC)数超过999时,Python pandasql sqldf提供“ SQL变量太多”

时间:2018-07-12 20:28:08

标签: python pandas pandasql

背景:

我最终试图连接驻留在完全不同的数据库中的两个表。我已经将数据加载到数据帧中,以通过sqldf执行SQL连接(这是因为该连接处于不等式,并且因为我对SQL非常熟悉,但在python中却不太满意)。

环境:

  • Anaconda上的Jupyter笔记本
  • PandaSQL 0.7.3
  • Numpy 1.14.3
  • SQLAlchemy 1.2.7
  • Python 3.6.5
  • Windows 10

问题:

我可以使用一个简单的内置数据集和一个非常简单的查询来重现此问题。以下代码:

from pandasql import sqldf, load_meat
meat = load_meat()
print(sqldf("SELECT * FROM meat;",locals()))

返回:

  

OperationalError:SQL变量过多

最终,这可以追溯到sqlite3,其中“ INSERT INTO”语句对每行使用一组8元组的参数,然后将值传递给这些参数:

SQL: 'INSERT INTO meat (date, beef, veal, pork, lamb_and_mutton, broilers, other_chicken, turkey) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?),

....

(?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?)'] 
[parameters: ('1944-01-01 00:00:00.000000', 751.0, 85.0, 1280.0, 89.0, None, None, None, '1944-02-01 00:00:00.000000', 713.0, 77.0, 1169.0, 72.0, None, None, None,
....

我也通过将简单的CSV加载到数据帧(500,2)中来重现此错误。如果我将CSV / df从500行减少到499,则sqldf可以正常工作。

在寻找解决方案时,我已经阅读了很多有关SQLite的999参数限制的信息。但是,我看到plenty of examples使用了内置数据集。特别是最后一个示例直接来自pandasql存储库。在该示例中运行代码,处理虹膜数据(150x6)的部分运行正常,而肉类数据(827x8)导致上述参数错误。

我在StackOverflow上找到了另一个对此问题的引用,但是那里没有任何活动。

0 个答案:

没有答案