Ошибка в SQLite ‘все ЗНАЧЕНИЯ должны иметь одинаковое количество терминов’

#python #sql #database #sqlite

#python #sql #База данных #sqlite

Вопрос:

Рад быть частью этой платформы среди вас, опытных программистов, в настоящее время я работаю над проектом POS-системы на python, используя 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. Спасибо Аниш Мехта

Ответ №1:

Что касается вашего кода, у вашего кода есть некоторые проблемы. Tkinter отправляет значения только через кнопки.

list — это ключевое слово в python, поэтому переименуйте его в list1.

Количество? также не соответствует. Вы также не должны использовать функцию .get() StringVar() в том же фрейме и вместо этого использовать ее в методе proced_raise_invoice() .

Внутри приведенной ниже функции я использовал метод .get() StringVar для получения значений, хранящихся в StringVar (значения, введенные пользователями)

Всегда используйте метод get() внутри функции, которую вы вызвали с помощью кнопки tkinter. Он получит значения 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)

 

Комментарии:

1. Количество? не соответствует, потому что, если я добавлю одинаковое количество? он показывает ошибку, и если я добавлю еще один? для этого он не показывает ошибку. Не могли бы вы объяснить, где я не должен использовать метод .get() и как я должен его использовать. Я не могу понять. Еще раз спасибо

2. Количество? должно быть равно длине вашего списка. Также я обновил свой ответ, который решает вашу проблему. Используйте .get() только внутри функции, которую вы вызвали с помощью кнопки tkinter

3. Большое вам спасибо, Пракаш, теперь я получаю эту ошибку;

4. Исключение в трассировке обратного вызова Tkinter (последний последний вызов): File: init.py верните файл self.func(* args): main.py список 1 = (invoice_number.get(), invoice_date.get(), name.get(), customer_gstin.get(), product.get(), hsn.get(), uom.get(), quantity.get(), rate.get(), amount, supplier.get()) Ошибка атрибута: объект ‘str’ не имеет атрибута ‘get’

5. Не могли бы вы помочь мне в этом