Как использовать Tkinter с SQLite в Python - PullRequest
0 голосов
/ 27 ноября 2018

У меня были проблемы с доставкой записи tkinter в sqlite. Моя цель - создать пользовательский интерфейс для сбора данных и удаления, отображения, обновления, я буду продолжать учиться.

Я думаю, что моя проблема в

def savedata ():

Я изменил то, что в скобках

Я попытался изменить это также

c.execute('INSERT INTO data (fname, sname) VALUES (?,?)', 
(firstname_entry, secondnamename_entry))
conn.commit()

.

спасибо за помощь

.

import random 
import tkinter as tk 
from tkinter import * 
from tkinter import messagebox 
import sqlite3 

def conacona(): 
    conn = sqlite3.connect('student.db') 
    c = conn.cursor() 
    c.execute("CREATE TABLE IF NOT EXISTS stud (firstname TEXT, secondname TEXT)") 
    conn.commit() 
    conn.close() 

#oooooooo 

main_menu = tk.Tk() 

firstname_label = Label(main_menu, text="First name") 
firstname_label.pack() 
secondname_label = Label(main_menu, text="Second name") 
secondname_label.pack() 

# First name get 
firstname_entry = tk.StringVar() 
firstname_entry_entry = Entry(main_menu, textvariable = fn_ent_ent) 
firstname_entry_entry.pack() 

# Second name get 
secondname_entry = tk.StringVar() 
secondname_entry_entry = Entry(main_menu, textvariable = sn_ent_ent) 
secondname_entry_entry.pack() 

def savedata (): 
    conn = sqlite3.connect('stud.db') 
    c = conn.cursor() 
    c.execute('INSERT INTO data (fname, sname) VALUES (?,?)', (firstname_entry, secondnamename_entry)) 
    conn.commit() 
    print("OK") 

u_ent_btn = Button(text="Enter",command=savedata()) 
u_ent_btn.pack() 

main_menu.mainloop() 

1 Ответ

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

Замените fn_ent_ent на firstname_entry и sn_ent_ent на secondname_entry для ссылки на созданные вами строковые переменные.

В операторе execute() есть опечатка: она должна быть secondname_entry, а не secondnamename_entry.Также вам нужно вызвать .get() для строковых переменных, чтобы получить значение, которое будет использоваться в запросе.

Оператор SQL должен ссылаться на правильные имена таблиц и столбцов, которые использовались при создании таблицы, а именно stud вместо data и firstname и secondname вместо fname и sname.

c.execute('INSERT INTO stud (firstname, secondname) VALUES (?,?)', (firstname_entry.get(), secondname_entry.get())) 

Не вызывать savedata() при передаче его в качестве функции для кнопкиcommand:

u_ent_btn = Button(text="Enter",command=savedata)

Наконец, вам необходимо вызвать conacona() для создания базы данных SQLite перед вводом mainloop().И вы должны использовать одно и то же имя файла для базы данных, поэтому сделайте его одним из stud.db или student.db, но не обоими.


Объединение всего этого приводит к следующему коду:

import random
import tkinter as tk
from tkinter import *
from tkinter import messagebox
import sqlite3

def conacona():
    conn = sqlite3.connect('student.db')
    c = conn.cursor()
    c.execute("CREATE TABLE IF NOT EXISTS stud (firstname TEXT, secondname TEXT)")
    conn.commit()
    conn.close()

#oooooooo 

main_menu = tk.Tk()

firstname_label = Label(main_menu, text="First name")
firstname_label.pack()
secondname_label = Label(main_menu, text="Second name")
secondname_label.pack()

# First name get 
firstname_entry = tk.StringVar()
firstname_entry_entry = Entry(main_menu, textvariable=firstname_entry)
firstname_entry_entry.pack()

# Second name get 
secondname_entry = tk.StringVar()
secondname_entry_entry = Entry(main_menu, textvariable=secondname_entry)
secondname_entry_entry.pack()

def savedata ():
    print(dir(firstname_entry))
    conn = sqlite3.connect('student.db')
    c = conn.cursor()
    c.execute('INSERT INTO stud (firstname, secondname) VALUES (?,?)', (firstname_entry.get(), secondname_entry.get()))
    conn.commit()
    print("OK")

u_ent_btn = Button(text="Enter",command=savedata)
u_ent_btn.pack()

conacona()
main_menu.mainloop()
...