我正在尝试从拼图表中运行两个选择查询,并从存储用户已经玩过的拼图的ID的表中运行一个。我希望从所选的谜题中选择ids,然后选择谜题的ids,以便我可以比较两个列表,找到用户尚未玩过的谜题。
我遇到了问题,因为第一个查询正确运行但第二个查询不是因为它似乎从第一个查询中获取了两个值。我怎么阻止这个?就像我需要在运行下一个选择查询之前关闭连接。
cur=connection.cursor()
cur.execute("SELECT id FROM puzzles WHERE approved =? AND level=? ",(1, UserLevel))
puzzle_rows=cur.fetchall()
print(puzzle_rows)
cur=connection.cursor()
cur.execute("SELECT id FROM puzzle_users WHERE name =?",(username))
played_rows=cur.fetchall()
print(played_rows)
not_played = [[x for x in puzzle_rows if x not in played_rows]]
print(not_played)
我得到的错误是:
conn.execute("SELECT id FROM puzzle_users WHERE name =?",(username))
sqlite3.ProgrammingError: Incorrect number of bindings supplied
当前语句使用1,并且提供了3个。
答案 0 :(得分:0)
此行中有错误:
cur.execute("SELECT id FROM puzzle_users WHERE name =?",(username))
使用单项元组时,应在结束括号前添加逗号:
cur.execute("SELECT id FROM puzzle_users WHERE name = ?", (username,))
否则(username)
只是string
,而不是tuple
。