Сохранение записей на tkinter в sqlite3 - PullRequest
0 голосов
/ 19 ноября 2018

заранее благодарю за любую помощь!

Я искал онлайн решение и изо всех сил пытался найти его.Я пытаюсь сохранить некоторые данные из текстового поля ввода на tkinter в таблицу в SQLite3, но я получаю ту же ошибку каждый раз, независимо от того, что я пытаюсь.Код ниже.

обратите внимание, я начал изучать кодирование из видео на YouTube несколько дней назад.извиняюсь, если это действительно просто!

**python file code**

from tkinter import *
import sqlite3
import tkinter.messagebox

# connect to database
conn = sqlite3.connect("RMS.db")
c = conn.cursor()



# tkinter window
class Application:
    def __init__(self, master):
        self.master = master

        # Creating frames in the master
        self.left = Frame(master, width=200, height=60, bg="grey")
        self.left.pack(side=LEFT)

        self.right = Frame(master, width=0, height=0, bg="grey")
        self.right.pack(side=RIGHT)

        # labels for window
        self.driverlevel = Label(self.left, text="Driver Level:", font="calabri 12 bold", fg="white", bg="grey")
        self.driverlevel.place(x=1, y=2)

        # Entries for left window
        self.driverlevel_ent = Entry(self.left, width=20)
        self.driverlevel_ent.place(x=5, y=27)

        # Save Button
        self.submit = Button(self.left, text="Add", font="calabri 12 bold", fg="white", bg="grey", command=self.addlevel)
        self.submit.place(x=140, y=15)

    def addlevel(self):
        self.val1 = self.driverlevel_ent.get()

        if self.val1 == "":
            tkinter.messagebox.showinfo("Warning", "Please Enter a Value")
        else:
            sql = "INSERT INTO 'driverlevel' (Level,) VALUES(?,)"
            c.execute(sql, (self.val1))
            conn.commit()
            tkinter.messagebox.showinfo("Success", "Driver Level Added")


# objects
root = Tk()
b = Application(root)
root.geometry("200x60+0+0")
root.resizable(False, False)
root.title("Add Driver Level")

root.mainloop()


**error message when saving**

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\*****\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/*****/PycharmProjects/******/driverlevel.py", line 41, in addlevel
    c.execute(sql, (self.val1))
sqlite3.OperationalError: near ")": syntax error

не знаю, как это преодолеть ..

Спасибо, Джош

1 Ответ

0 голосов
/ 19 ноября 2018

Вы вставили , после Level, and ?,, который должен был быть "INSERT INTO 'driverlevel' (Level) VALUES(?), затем вставили запятую , в конце (self.val1,), чтобы увидеть его как кортеж, потому что вы можете вставить данные в sqlite3 как кортеж

Вы также можете вставить данные таким образом

sql = "INSERT INTO driverlevel (Level) VALUES(?,)"
conn = sqlite3.connect("RMS.db")
c = conn.cursor()
c.execute("INSERT INTO driverlevel(level)VALUES(?)", (self.val1,))
conn.commit()
tkinter.messagebox.showinfo("Success", "Driver Level Added")

Убедитесь, что вы закрыли БД после вставки.

Полный код

from tkinter import *
import sqlite3
import tkinter.messagebox

# connect to database
conn = sqlite3.connect("RMS.db")
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS driverlevel(level text, age text)")
conn.commit()
conn.close()



# tkinter window
class Application:
    def __init__(self, master):
        self.master = master

        # Creating frames in the master
        self.left = Frame(master, width=200, height=60, bg="grey")
        self.left.pack(side=LEFT)

        self.right = Frame(master, width=0, height=0, bg="grey")
        self.right.pack(side=RIGHT)

        # labels for window
        self.driverlevel = Label(self.left, text="Driver Level:", font="calabri 12 bold", fg="white", bg="grey")
        self.driverlevel.place(x=1, y=2)

        # Entries for left window
        self.driverlevel_ent = Entry(self.left, width=20)
        self.driverlevel_ent.place(x=5, y=27)

        # Save Button
        self.submit = Button(self.left, text="Add", font="calabri 12 bold", fg="white", bg="grey", command=self.addlevel)
        self.submit.place(x=140, y=15)

    def addlevel(self):
        self.val1 = self.driverlevel_ent.get()

        if self.val1 == "":
            tkinter.messagebox.showinfo("Warning", "Please Enter a Value")
        else:
            #sql = "INSERT INTO driverlevel (Level) VALUES(?,)"
          #  conn = sqlite3.connect("RMS.db")
          #  c = conn.cursor()
          #  c.execute("INSERT INTO driverlevel(level)VALUES(?)", (self.val1,))
           # conn.commit()
           # tkinter.messagebox.showinfo("Success", "Driver Level Added")

            conn = sqlite3.connect("RMS.db")
            c = conn.cursor()
            sql = "INSERT INTO 'driverlevel' (Level) VALUES(?)"
            c.execute(sql, (self.val1,))
            conn.commit()
            conn.close()

            tkinter.messagebox.showinfo("Success", "Driver Level Added")


# objects
root = Tk()
b = Application(root)
root.geometry("200x60+0+0")
root.resizable(False, False)
root.title("Add Driver Level")

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...