добавить в базу данных по записи виджета - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь добавить информацию в базу данных (sqlite3, python 3.6) Я без проблем создал виджет tkinter, но у меня возникла проблема с сохранением информации, собранной из виджета ввода, и ее сохранением в базе данных

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from tkinter import *
import sqlite3

master=Tk()
master.geometry('450x300')
master.title('add into database')

var_Name=StringVar()
var_Street=StringVar()
var_City=StringVar()

CreateDataBase = sqlite3.connect('MyDataBase.db')

QueryCurs = CreateDataBase.cursor()
#to create a table (Clients)
def CreateTable():
    QueryCurs.execute('''CREATE TABLE IF NOT EXISTS Clients
    (id INTEGER PRIMARY KEY, Name TEXT,Street TEXT,Town TEXT)''')

def AddEntry(Nom,Rue,Ville):

    QueryCurs.execute('''INSERT INTO Clients (Name,Street,Town)
    VALUES (?,?,?)''',(str(var_Name.get()),str(var_Street.get()),str(var_City.get())))

CreateTable()

label_Name=Label(master, text ='enter your name  :')
label_Name.pack()  
entry_Name=Entry(master,textvariable=var_Name)
entry_Name.pack()   
label_Street=Label(master, text ='enter street :')
label_Street.pack()
entry_Street=Entry(master,textvariable=var_Street)
entry_Street.pack() 
label_City=Label(master, text ='enter city :')
label_City.pack()
entry_City=Entry(master,textvariable=var_City)
entry_City.pack()   
btn_Valider=Button(master,text='validate', command=AddEntry)
btn_Valider.pack()

CreateDataBase.commit()  
QueryCurs.execute('SELECT * FROM Clients ORDER BY id DESC')

for i in QueryCurs:
    print ("\n")
    for j in i:
        print (j)

QueryCurs.close()

master.mainloop()

когда я тестирую код, у меня появляется эта ошибка:

TypeError: AddEntry() missing 3 required positional arguments: 'Name', 'Street', and 'City'

мне нужна помощь спасибо

1 Ответ

0 голосов
/ 05 января 2019

Я изменяю функцию " AddEntry " этим новым кодом:

def AddEntry():
    city_get=str(var_City.get())
    name_get=str(var_Name.get())
    street_get=str(var_Street.get())
    QueryCurs.execute('''INSERT INTO Clients (Name,Street,City) VALUES (?,?,?)''',(name_get,street_get,city_get))
    CreateDataBase.commit()

и я добавляю эту новую функцию и кнопку для отображения содержимого базы данных.

btn_display_database=Button(master,text='display content of database', command=display_database)
btn_display_database.pack()

def display_database():
    QueryCurs.execute('SELECT * FROM Clients ORDER BY id DESC') 
    for resultat in QueryCurs.fetchall():
        print(resultat)

скрипт работает, если я не пишу в конце скрипта раньше: master.mainloop () это две команды для закрытия курсора и соединения:

QueryCurs.close()
CreateDataBase.close()

если я напишу эти две последние команды, при запуске сценария у меня будет ошибка ниже:

sqlite3.ProgrammingError: Cannot operate on a closed cursor
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...