对于我的学校项目,我决定制作一个物理修订工具。该工具允许用户登录并保存有关某些问题的性能信息。因此,我意识到我需要为用于存储每个用户得分的每个表命名,因此我认为使用.format是合适的。直到我需要添加将向表中添加信息的代码为止,它似乎都工作正常。从到目前为止我对代码所做的测试来看,我认为问题是因为我使用的是.format,它实际上不会创建任何列。我不知道该如何解决,请帮忙。提供了适当的代码部分:
def quesprep():
intro.destroy()
con= sqlite3.connect("login.db")
c= con.cursor()
c.execute("SELECT accid FROM credentials WHERE accountname = ?", (user,))
global results
results=c.fetchall()
con.commit()
con.close()
con= sqlite3.connect("store.db")
c= con.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS {}(mod integer, ques integer,score integer)""".format(results))
c.execute("INSERT INTO {} Values(mod=2,ques=1, score=0)".format(results))
con.commit()
con.close()
ques()
def mod2q1page():
questionspage.destroy()
con= sqlite3.connect("login.db")
c= con.cursor()
c.execute("SELECT accid FROM credentials WHERE accountname = ?", (user,))
global results
results=c.fetchall()
con.commit()
con= sqlite3.connect("store.db")
c= con.cursor()
c.execute("INSERT OR IGNORE INTO {} VALUES(mod=2, ques=2, score=0)" .format(results))
答案 0 :(得分:0)
这里似乎有些错误。
格式在{}中接受一个变量,例如{0},{1}等
占位符是格式化sql查询的首选方法……就像您在SELECT中所做的那样
我不确定这是什么问题,但是如果您要添加列,则需要更改表...而不是INSERT。 INSERT将添加一个行项目。如果您可以发布错误,也许我们可以提供更多帮助。为了让您入门,请尝试使用占位符代替格式。
另外,fetchall返回一个元组列表...需要在sql中发送一个元组,而不是一个列表。
for x in results:
c.execute("INSERT INTO ? (col1, col2, col3) VALUES (1, 2, 3);", x)
编辑:
我已经纠正-我运行了以下代码:
data = [('user',)]
cursor.execute("INSERT INTO ? (id, email, password) VALUES (1, test, test);", data)
语法错误,因为无法将占位符添加到表名。阅读here
我在{0}中使用了格式:
cursor.execute("INSERT INTO {0} (id, email, password) VALUES (1, test, test);".format('user'))
查询成功。我相信这是您的问题。