当我在 Tkinter 中编辑文本框时,数据库不会更新。错误:sqlite3.OperationalError:“?”附近:语法错误

问题描述 投票:0回答:1

我无法更新两个文本框的值。我的目标是更改文本框的值并单击 Update_Value 按钮来更新数据库。

我收到此错误:

sqlite3.OperationalError: near "?": syntax error

我想实现什么目标?在文本框

x
中显示值
50
。在文本框
y
中显示值
60
。例如,我想修改文本框
x
并将
50
替换为
55
,然后单击按钮。因此,我希望将数据库中具有
50
的值
id = 1
替换为
55
。与文本框
y
相同,对应于
id = 2

x = ttk.Entry(self, width=7)
x.place(x=420, y=30)

y = ttk.Entry(self, width=7)
y.place(x=420, y=55)

def Update_Value():
    new_connection = sqlite3.connect('...')
    connect = new_connection.cursor()

    connect.execute("UPDATE Valori_Textbox SET valori=?", (x.get(), y.get(),))

button1 = Button(root, text="Update Value", command= Update_Value)
button1.place(x=0, y=0)

简单的数据库是:

CREATE TABLE "Valori_Textbox" (
    "id"    INTEGER,
    "valori"    INTEGER,
    PRIMARY KEY("id")
);

INSERT INTO Valori_Textbox
  (`valori``)
VALUES
  ('50'),
  ('60');
python sql python-3.x sqlite tkinter
1个回答
0
投票

要回答您的问题,您可以通过两种方式添加

根据id单独更新

# Update the row with id=1
connect.execute("UPDATE Valori_Textbox SET valori=? WHERE id=1", (x.get(),))

# Update the row with id=2
connect.execute("UPDATE Valori_Textbox SET valori=? WHERE id=2", (y.get(),))

或在一行中更新它们

connect.execute("UPDATE Valori_Textbox SET valori = CASE id WHEN 1 THEN ? WHEN 2 THEN ? END", (x.get(), y.get()))

这两者都会相应地更新两行的值

为您提供完整的脚本,请尝试下面 - 希望这会有所帮助

import sqlite3
import tkinter as tk
from tkinter import ttk

def Update_Value():
    new_connection = sqlite3.connect('your_database.db')  # Replace with your database file
    connect = new_connection.cursor()

    connect.execute("UPDATE Valori_Textbox SET valori = CASE id WHEN 1 THEN ? WHEN 2 THEN ? END", (x.get(), y.get()))

    new_connection.commit()  # Commit the changes to the database
    new_connection.close()   # Close the database connection

root = tk.Tk()

x = ttk.Entry(root, width=7)
x.place(x=420, y=30)

y = ttk.Entry(root, width=7)
y.place(x=420, y=55)

button1 = tk.Button(root, text="Update Value", command=Update_Value)
button1.place(x=0, y=0)

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.