pandas - DatabaseError:提供的绑定数量不正确
问题描述
我正在尝试从大型 csv 文件中查询;我正在显示前三行:
import pandas as pd
df = pd.read_csv('crime.csv', nrows=3); df
由于内存限制,我首先创建 db 文件,然后从那里查询如下:
import sqlite3
db = sqlite3.connect("crime.sqlite")
for chunk in pd.read_csv('crime.csv', chunksize=1000):
chunk.to_sql("crime", db, if_exists="append")
db.execute("CREATE INDEX NEIGHBORHOOD_ID on crime(NEIGHBORHOOD_ID)")
db.close()
在这里,我定义了一个函数来读取新创建的 .sqlite 并对其进行查询:
def crime_neighbor(neighbor_id):
conn = sqlite3.connect("crime.sqlite")
q = "SELECT * FROM crime WHERE NEIGHBORHOOD_ID = ?"
values = (neighbor_id,)
return pd.read_sql_query(q, conn, values)
当我运行时crime_neighbor("cbd")
,我收到以下错误:
DatabaseError: Execution failed on sql 'SELECT * FROM crime WHERE NEIGHBORHOOD_ID = ?': Incorrect number of bindings supplied. The current statement uses 1, and there are 0 supplied.
我尝试更改values = (neighbor_id,)
为,values = [neighbor_id,]
但错误仍然相同。
解决方案
检查pd.read_sql_query(q, conn, values)
. 它实际上并不发送参数。查看文档中的函数签名和参数。
推荐阅读
- python - 不检索任何结果的模式
- javascript - 如何创建程序数组地图(使用数组作为平铺地图)
- python - 在 Python 中为我的词法分析器制作符号表有困难吗?
- c# - 如何使用 Parallel.ForEach 更新共享状态
- laravel - 如何将数据从数据库传递到Mailable?
- bash - bash函数在循环内吞下新行
- python - 不能在 SQL Server 代理作业上使用谷歌包?
- python - python:比较日期时间熊猫
- typescript - 如何在 Typescript 中将类型定义为接口
- javascript - 从 useEffect 调用调用的函数渲染太快并且中断,重新渲染后正常工作