为了账号安全,请及时绑定邮箱和手机立即绑定

Sqlite3 表 users 有 7 列,但提供了 6 个值

Sqlite3 表 users 有 7 列,但提供了 6 个值

12345678_0001 2023-06-27 13:47:46
请我是 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 回答

?
斯蒂芬大帝

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 说这个问题被调用了INSERT6 次。

让我知道这是否修复了错误


查看完整回答
反对 回复 2023-06-27
?
暮色呼如

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))


查看完整回答
反对 回复 2023-06-27
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

如果您不提供所有列(此处不提供 ID),则应在值之前指定列名称:

INSERT INTO users (column1,column2 ,..) VALUES( value1, value2 ,...);


查看完整回答
反对 回复 2023-06-27
  • 3 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信