OperationalError:(sqlite3.OperationalError) SQL 变量过多,同时将 SQL 与数据帧一起使用

OperationalError: (sqlite3.OperationalError) too many SQL variables, while using SQL with dataframes

提问人:Sarang Manjrekar 提问时间:5/24/2018 更新时间:9/28/2023 访问量:1054

问:

我有一个熊猫数据帧,如下所示。

       activity         User_Id  \
0  VIEWED MOVIE  158d292ec18a49   
1  VIEWED MOVIE  158d292ec18a49   
2  VIEWED MOVIE  158d292ec18a49   
3  VIEWED MOVIE  158d292ec18a49   
4  VIEWED MOVIE  158e00978d7a6c   

                                         Media_Title Media_Type User_Rating  
0  20th Asian Athletics Championship-2013 Held At...                     NA  
1                                 Tu Majha Saangaati                     NA  
2                                       Home Cooking                     NA  
3                                         Mix Dil Se                     NA  
4                  Value, Virtues, Ethics & Morality                     NA

我正在尝试使用 pandasql 的 sqldf 包编写 SQL 查询,如下所示。

distinct_activity_user = pandasql.sqldf(" select User_Id from pmm_activity", locals())

我收到的错误是:

OperationalError: (sqlite3.OperationalError) too many SQL variables [SQL: 'INSERT INTO pmm_activity (activity, "User_Id", "Media_Title", "Media_Type", "User_Rating") VALUES
Python Pandas 数据帧

评论


答:

0赞 Serge de Gosson de Varennes 11/10/2020 #1

这可能是与列名中的空格有关的问题。当我尝试使用您提供的数据时,我遇到了这种情况。我有一个使用 .下面是一个示例,可以解决您的问题:sqlite3

import sqlite3 as sql
import pandas as pd

file         = "..../movie.csv"
df = pd.read_csv(file, sep=";", dtype='unicode' )

这是 datarame 的样子

enter image description here

conn = sql.connect('movie2.db')
df.to_sql('movie', conn)
conn = sql.connect('movie2.db')
Movie = pd.read_sql('SELECT distinct "User_Id  "  FROM movie', conn)

enter image description here

0赞 Stickleback 9/28/2023 #2

几个潜在原因:

  1. 此问题已在 git 存储库中注册,并建议根据您的版本号升级 pandas

https://github.com/yhat/pandasql/issues/72

  1. 如果问题中的数据帧是您遇到异常的完整数据帧,则此情况将不适用...但如果是代表性样本,则此问题可能是一个原因。因此,请尝试限制/限制初始数据帧建议:

https://github.com/yhat/pandasql/issues/79

否则,我将尝试从初始数据帧中删除除User_Id列之外的所有列,以测试这是否有效。如果是这样,我会在旁边添加media_type,看看空白是否是原因等等。