【问题标题】:Error in SQLite 'all VALUES must have the same number of terms'SQLite 中的错误'所有 VALUES 必须具有相同数量的术语'
【发布时间】:2021-01-18 10:17:39
【问题描述】:

很高兴成为这个平台的一部分,经验丰富的程序员, 现在我正在用python开发一个POS系统项目,使用tkinter作为前端,使用Sqlite作为数据库。在将数据放入其中时,我面临着这个问题。 '''

def proceed_raise_invoice():
    execute_query(connection, create_invoices)

ttk.Label(tab1, text="Raise Invoice", font=('', 20)).grid(column=0, row=0)
ttk.Label(tab1, text="General Details:", font=('', 15)).grid(column=0, row=4)
invoice_number = tk.StringVar()
ttk.Label(tab1, text="Invoice Number:", font=('', 12)).grid(column=0, row=5)
ttk.Entry(tab1, width=22, font=('', 12), textvariable=invoice_number).grid(column=3, row=5)
invoice = invoice_number.get()
invoice_date = date.today()
ttk.Label(tab1, text="Date:", font=('', 12)).grid(column=0, row=6)
ttk.Entry(tab1, width=22, font=('', 12), textvariable=invoice_date).grid(column=3, row=6)
ttk.Label(tab1, text="Details of receiver/billed to:", font=('', 15)).grid(column=0, row=7)
name = ""
ttk.Label(tab1, text="Name:", font=('', 12)).grid(column=0, row=8)
ttk.Combobox(tab1, width=30, textvariable=name).grid(column=3, row=8)
customer_gstin = "07"
ttk.Label(tab1, text="GSTIN:", font=('', 12)).grid(column=0, row=9)
ttk.Label(tab1, text="", font=('', 12), textvariable=customer_gstin).grid(column=3, row=9)
ttk.Label(tab1, text="Purchasing:", font=('', 15)).grid(column=0, row=10)
product = ""
ttk.Label(tab1, text="Name of product:", font=('', 12)).grid(column=0, row=11)
ttk.Entry(tab1, width=22, font=('', 12), textvariable=product).grid(column=3, row=11)
hsn = ""
ttk.Label(tab1, text="HSN ACS:", font=('', 12)).grid(column=0, row=12)
ttk.Combobox(tab1, width=30, textvariable=hsn).grid(column=3, row=12)
uom = ""
ttk.Label(tab1, text="Units of Measure:", font=('', 12)).grid(column=0, row=13)
ttk.Entry(tab1, width=33, textvariable=uom).grid(column=3, row=13)
quantity = int(1)
ttk.Label(tab1, text="Quantity:", font=('', 12)).grid(column=0, row=14)
ttk.Entry(tab1, width=22, font=('', 12), textvariable=quantity).grid(column=3, row=14)
rate = int(0)
ttk.Label(tab1, text="Rate:", font=('', 12)).grid(column=0, row=15)
ttk.Entry(tab1, width=22, font=('', 12), textvariable=rate).grid(column=3, row=15)
supplier = ""
ttk.Label(tab1, text="Supplier:", textvariable=supplier, font=('', 15)).grid(column=0, row=18)
ttk.Combobox(tab1, width=20, font=('', 12)).grid(column=3, row=18)
ttk.Button(tab1, text='Proceed', command=proceed_raise_invoice).grid(column=3, row=19)

amount = quantity * rate

list = ['invoice_number', 'invoice_date', 'name', 'customer_gstin', 'product', 'hsn', 'uom', 'quantity', 'rate', 'amount', 'supplier']

create_invoices_table = """
CREATE TABLE IF NOT EXISTS invoices (
    invoice_no TEXT PRIMARY KEY NOT NULL,
    date TEXT NOT NULL,
    customer_name TEXT NOT NULL ,
    gstin TEXT NOT NULL,
    product TEXT NOT NULL,
    hsn INTEGER NOT NULL,
    uom TEXT NOT NULL,
    quantity INTEGER NOT NULL,
    rate INTEGER NOT NULL,
    amount INTEGER NOT NULL,
    supplier TEXT NOT NULL
);
"""
execute_query(connection, create_invoices_table)

create_invoices = """
INSERT INTO
    invoices (invoice_no, date, customer_name, gstin, product, hsn, uom, quantity, rate, amount, supplier)
VALUES
    (?,?),('list')
"""

'''

我在这里尝试做的是从 tkinter 小部件中检索数据,然后将其上传到数据库。如果您能指出哪里出了问题,或者您能告诉我我是否使用正确的方法从 tkinter 小部件中检索数据,我将不胜感激。 谢谢 阿尼什·梅塔

【问题讨论】:

    标签: python sql database sqlite


    【解决方案1】:

    就您的代码而言,您的代码存在一些问题。 Tkinter 只通过按钮发送值。

    list 是 python 中的关键字,因此将其重命名为 list1。

    没有。的 ?也不匹配。 您也不应该在同一框架内使用 StringVar() 的 .get() 函数,而应在proceed_raise_invoice() 方法中使用它。

    在下面的函数中,我使用了 StringVar 的 .get() 方法来获取存储在 StringVar 中的值(用户输入的值)

    始终在您通过 tkinter 按钮调用的函数中使用 get() 方法。单击按钮后,它将获取 StringVar 的值。并且不要全局使用 .get() 的 StringVar。

    你可以这样使用 sqlite:

    import sqlite3 as db
    
    conn = db.connect('dbname.db')
    cur = conn.cursor()
    cur.execute("""
    CREATE TABLE IF NOT EXISTS invoices (
        invoice_no TEXT PRIMARY KEY NOT NULL,
        date TEXT NOT NULL,
        customer_name TEXT NOT NULL ,
        gstin TEXT NOT NULL,
        product TEXT NOT NULL,
        hsn INTEGER NOT NULL,
        uom TEXT NOT NULL,
        quantity INTEGER NOT NULL,
        rate INTEGER NOT NULL,
        amount INTEGER NOT NULL,
        supplier TEXT NOT NULL
    )
    """)
    cur.close()
    conn.commit()
    conn.close()
    
    invoice_number = tk.StringVar()
    customer_gstin = tk.StringVar("07")
    today = date.today()
    today = str(today)
    invoice_date = tk.StringVar(today)
    name = tk.StringVar()
    product = tk.StringVar()
    quantity = tk.IntVar(1)
    rate = tk.IntVar(0)
    hsn = tk.StringVar()
    uom = tk.StringVar()
    supplier = tk.StringVar()
    
    
    def proceed_raise_invoice():
        conn = db.connect('dbname.db')
        cur = conn.cursor()
    
        amount = quantity.get() * rate.get()
    
        list1 = (invoice_number.get(), invoice_date.get(), name.get(), customer_gstin.get(), product.get(), hsn.get(), uom.get(), quantity.get(), rate.get(), amount, supplier.get())
    
        cur.execute("""
        INSERT INTO
        invoices (invoice_no, date, customer_name, gstin, product, hsn, uom, quantity, rate, amount, supplier)
        VALUES (?,?,?,?,?,?,?,?,?,?,?)""",list1)
    
    
        cur.close()
        conn.commit()
        conn.close()
    
    
    ttk.Label(tab1, text="Raise Invoice", font=('', 20)).grid(column=0, row=0)
    ttk.Label(tab1, text="General Details:", font=('', 15)).grid(column=0, row=4)
    
    ttk.Label(tab1, text="Invoice Number:", font=('', 12)).grid(column=0, row=5)
    ttk.Entry(tab1, width=22, font=('', 12), textvariable=invoice_number).grid(column=3, row=5)
    
    ttk.Label(tab1, text="Date:", font=('', 12)).grid(column=0, row=6)
    ttk.Entry(tab1, width=22, font=('', 12), textvariable=invoice_date).grid(column=3, row=6)
    ttk.Label(tab1, text="Details of receiver/billed to:", font=('', 15)).grid(column=0, row=7)
    
    ttk.Label(tab1, text="Name:", font=('', 12)).grid(column=0, row=8)
    ttk.Combobox(tab1, width=30, textvariable=name).grid(column=3, row=8)
    
    ttk.Label(tab1, text="GSTIN:", font=('', 12)).grid(column=0, row=9)
    ttk.Label(tab1, text="", font=('', 12), textvariable=customer_gstin).grid(column=3, row=9)
    ttk.Label(tab1, text="Purchasing:", font=('', 15)).grid(column=0, row=10)
    
    ttk.Label(tab1, text="Name of product:", font=('', 12)).grid(column=0, row=11)
    ttk.Entry(tab1, width=22, font=('', 12), textvariable=product).grid(column=3, row=11)
    
    ttk.Label(tab1, text="HSN ACS:", font=('', 12)).grid(column=0, row=12)
    ttk.Combobox(tab1, width=30, textvariable=hsn).grid(column=3, row=12)
    
    ttk.Label(tab1, text="Units of Measure:", font=('', 12)).grid(column=0, row=13)
    ttk.Entry(tab1, width=33, textvariable=uom).grid(column=3, row=13)
    
    ttk.Label(tab1, text="Quantity:", font=('', 12)).grid(column=0, row=14)
    ttk.Entry(tab1, width=22, font=('', 12), textvariable=quantity).grid(column=3, row=14)
    
    ttk.Label(tab1, text="Rate:", font=('', 12)).grid(column=0, row=15)
    ttk.Entry(tab1, width=22, font=('', 12), textvariable=rate).grid(column=3, row=15)
    
    ttk.Label(tab1, text="Supplier:", textvariable=supplier, font=('', 15)).grid(column=0, row=18)
    ttk.Combobox(tab1, width=20, font=('', 12)).grid(column=3, row=18)
    ttk.Button(tab1, text='Proceed', command=proceed_raise_invoice).grid(column=3, row=19)
    
    

    【讨论】:

    • 没有。的 ?不匹配,因为如果我输入相同数量的 ?它显示一个错误,如果我再添加一个?对它来说,它没有显示错误。您能否解释一下我不应该在哪里使用 .get() 方法以及我应该如何使用它。我无法理解。再次感谢
    • 数量?应该等于您的列表的长度。我也更新了我的答案,解决了你的问题。仅在您通过 tkinter 按钮调用的函数中使用 .get()
    • 非常感谢 Prakash,现在我收到此错误;
    • Tkinter 回调 Traceback 中的异常(最近一次调用最后一次):文件:init.py return self.func(*args) 文件:main.py list1 = (invoice_number. get()、invoice_date.get()、name.get()、customer_gstin.get()、product.get()、hsn.get()、uom.get()、quantity.get()、rate.get( ), amount, supplier.get()) AttributeError: 'str' object has no attribute 'get'
    • 你能指导我吗
    猜你喜欢
    • 2019-05-04
    • 2021-07-12
    • 2017-06-22
    • 1970-01-01
    • 2019-09-22
    • 2018-06-12
    • 2022-10-25
    • 1970-01-01
    • 2019-04-03
    相关资源
    最近更新 更多