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

请我是 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


12345678_0001
浏览 155回答 3
3回答

斯蒂芬大帝

我实际上认为不要循环遍历列表,只需执行以下操作: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 次。让我知道这是否修复了错误

暮色呼如

下面的循环是错误的 - 在此循环中您调用了 INSERT 6 次。每次使用 1 个字符串(姓名、电子邮件、..)。您需要调用一次 INSERT 并用作new_user第二个参数c.executenew_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))

蛊毒传说

如果您不提供所有列(此处不提供 ID),则应在值之前指定列名称:INSERT INTO users (column1,column2 ,..) VALUES( value1, value2 ,...);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python