请我是 python 和 sqlite3 的新手,我试图找到注册表单无法提交的可能原因,它一直给我一个错误。并且提供的值不断倒计时c.execute("INSERT INTO users VALUES (?, ?, ?, ?, ?, ?)", (element)) sqlite3.OperationalError:表 users 有 7 列,但提供了 6 个值 # Importing Tkinter framework fr om tkinter import * from tkinter import ttk # Import sqlite3 import sqlite3 def setup_db(): # Open db global conn conn = sqlite3.connect('shengen.db') # Create a cursor global c c = conn.cursor() # Create the table if it doesn't exist try: c.execute("""CREATE TABLE if not exists users( ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, fname TEXT NOT NULL, email TEXT NOT NULL, password TEXT NOT NULL, cPassword TEXT NOT NULL, sex INTEGER NOT NULL, country TEXT NOT NULL );""") conn.commit() except sqlite3.OperationalError: print("ERROR: Table not Created") def reg_submit(): # Insert record into the db new_user = [fname.get(), email.get(), password.get(), cPassword.get(), sex.get(), country.get()] for element in new_user: c.execute("INSERT INTO users VALUES (?, ?, ?, ?, ?, ?)", (element)) conn.commit() c.close() conn.close() def register(): root1 = Toplevel(root) root1.geometry("900x700") root1.title("Registration Page") root1.iconbitmap("") global fname global email global password global cPassword global sex global sex1 global country
3 回答
![?](http://img1.sycdn.imooc.com/545869470001a00302200220-100-100.jpg)
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
我实际上认为不要循环遍历列表,只需执行以下操作:
values = fname.get(), email.get(), password.get(),cPassword.get(), sex.get(), country.get() c.execute("INSERT INTO users(fname,email,password,cPassword,sex,country) VALUES (?, ?, ?, ?, ?, ?)", values) c.execute('commit')
我在这里所做的只是指定要插入哪一列,而您的表有 7 列(包括 )但只给出了 6 个值这一事实oid
可能就是问题所在。我没有循环,因为我相信 @balderman 说这个问题被调用了INSERT
6 次。
让我知道这是否修复了错误
![?](http://img1.sycdn.imooc.com/53339fdf00019de902200220-100-100.jpg)
暮色呼如
TA贡献1853条经验 获得超9个赞
下面的循环是错误的 - 在此循环中您调用了 INSERT 6 次。
每次使用 1 个字符串(姓名、电子邮件、..)。
您需要调用一次 INSERT 并用作new_user
第二个参数c.execute
new_user = [fname.get(), email.get(), password.get(), cPassword.get(), sex.get(), country.get()] for element in new_user: c.execute("INSERT INTO users VALUES (?, ?, ?, ?, ?, ?)", (element))
![?](http://img1.sycdn.imooc.com/5458502c00012d4a02200220-100-100.jpg)
蛊毒传说
TA贡献1895条经验 获得超3个赞
如果您不提供所有列(此处不提供 ID),则应在值之前指定列名称:
INSERT INTO users (column1,column2 ,..) VALUES( value1, value2 ,...);
添加回答
举报
0/150
提交
取消