【问题标题】:Python SQLite3 Programming Error about Bindings关于绑定的 Python SQLite3 编程错误
【发布时间】:2019-12-11 01:24:03
【问题描述】:

我正在尝试创建视频数据数据库,但遇到以下代码问题。数组数据将导入文件中的每个元组保存在列表中,但是我无法弄清楚如何消除错误并将文件中的数据行导入数据库

c.execute('''CREATE TABLE videodata(Video_Id TEXT, Uploader TEXT, Age INT, Category TEXT, Length INT, 
Views INT, Rate INT, Ratings INT, Comments INT, Related_IDs TEXT, PRIMARY KEY(Video_ID))''')

with open('youtubedatafinal.txt', 'r') as csvfile:
reader = csv.reader(csvfile, delimiter='\t')
for row in reader:
  data.append(row)

c.executemany("""INSERT INTO 'videodata'('Video_Id', 'Uploader', 'Age', 'Category', 'Length', 'Views', 'Rate', 'Ratings', 'Comments', Related_IDs) VALUES (?, ?, ?, ?, ? ,? ,? ,? ,? ,?);""",(data,))

它给了我错误

sqlite3.ProgrammingError 提供的绑定数量不正确。当前语句使用 10,提供了 3169 个

【问题讨论】:

  • 一个有趣的观察。如果我将代码更改为此 '''with open('youtubedatafinal.txt', 'r') as csvfile: reader = csv.reader(csvfile, delimiter='\t') for row in reader: data = [] data.append(row)''' 它说的是 1 而不是 3169
  • 您确定数据有多行且列数相同吗?

标签: python sql sqlite


【解决方案1】:

问题在于data 列表的构建(我假设它是一个列表,定义未显示)。您的 csv 输入中可能有 3169 行,它正试图将它们用作第一次执行 sql 语句的参数。如果你打印data,你应该得到一个关于结构的提示,以及它是如何出错的。

【讨论】:

  • 是的,我相信这是问题所在,但我不知道如何解决。我希望元组中的每个值都进入相应的列。有没有办法让它以另一种方式阅读?
  • 我是 sqlite 的新手
  • 其实,试着写executemany(. . ., data),不要在构造括号的元组中包含数据。看起来您正在生成一个包含一个条目的元组,该条目包含 3169 个项目。
  • 试过了,它似乎有帮助,但现在它说 11 提供而不是 3169。这会是数据文件的问题吗?
  • 文件中的至少一行可能有 11 个值。如果您打印或检查data 的内容,您应该会看到问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
相关资源
最近更新 更多