首页 > 解决方案 > 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,]但错误仍然相同。

标签: pandassqlite

解决方案


检查pd.read_sql_query(q, conn, values). 它实际上并不发送参数。查看文档中的函数签名和参数。


推荐阅读