Python Forum

Full Version: Редактировать данные в sqlite3
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Добрый день помогите решить проблему редактирования данных в sqlite3.
Опишу проблему:
Вывожу данные из sql в приложение на python tkinter. Данные таблиц выводятся в поля entry.
Как возможно сделать редактирование entry c сохранением?
Не понимаю как получить entry, который хочу редактировать.
Буду благодарен любой помощи
Мой код:
#Функция создания кнопок.
def But ():
	global nex, ins
	s = sel.get()
	list = root.grid_slaves(row =6)
	for l in list:
		l.destroy()
	nex = Button(command = Table)
	nex.grid(row = 7, column = 0, sticky = E, pady = 10, columnspan = 2)
	nex.config(text = "Показать следующие " + "значений >>")
	ins = Button(text = "Добавить запись", command = childl)
	ins.grid(row= 7, column = 3, sticky = E, pady = 10, columnspan = 2)
	zapis = Button(text="Сохранить", command = zapiss)
	zapis.place(x = 680, y = 90)
	Table()
	
#Функция создания выбора количества строк
def RB(event):
	global sel 
	global nex
	sel = IntVar()
	se = Label(text = "Показать: ")
	se.place(x = 240, y = 45)
	enty = Entry(textvariable = sel)
	enty.place(x = 300, y = 45)
	fr = Button(text="Вывести", command = But, height = 2,  width = 8)
	fr.place(x = 430, y = 35)
	
#Функция очистки окна 
def clear ():
	list = root.grid_slaves()
	for l in list:
		l.destroy()
#Функция закрытия окна
def Close():
	root.destroy()
	
#Функция редактирования и сохранения данных.
def zapiss():
	b = r.get()
	print(all_table, b)
	#cursor.execute("INSERT INTO {} VALUES{}".format(all_table, b))
	cursor.execute("UPDATE {} SET Телефон WHERE = 1;".format(all_table))

#Функция обозначения имени полей таблиц БД
def Table():
	global dsh
	s = int(sel.get())
	for i in range(8,25):
		list = root.grid_slaves(row=i)
		for l in list:
			l.destroy()
		list = root.grid_slaves(row = 8)
		for l in list:
			l.destroy()
		table_name = var.get()
		der = cursor.execute("SELECT name FROM pragma_table_info(:table_name)", {"table_name": table_name}).fetchall()
		ciao = der
		w = 0
		dsh=[]
		for i in ciao:
			if s==0:
				nex.grid_forget()
				ins.grid_forget()
				break
			counter = 0
			for a in i:
				counter+=1 
				if counter >0 :
					stolb = Label(text = a, justify = CENTER)
					stolb.grid(row = 8, column = w, sticky= "w", pady = 10)
					w=w+1
				dsh.append(stolb)
				

	Tablel()

#Функция отображения данных таблицы
def Tablel ():
	global r, all_table
	s = int(sel.get())
	q = 0
	z = 0
	x = 10
	all_table = var.get()
	cursor.execute('SELECT * FROM {}'.format(all_table))
	print(all_table)
	rows = cursor.fetchall()
	for row in rows:
		y = 0
		x = x+1
		z = z+1
		if s==0:
			messagebox.showinfo('СУБД',('Заполните поле'))
			break
		for ro in row:
			r = Entry()
			r.insert(0, ro)
			r.grid(row=x, column = y, sticky = "w", pady = 1)
			y = y+1
		if s==z:
			break
После выбора данных с помощью cursor.execute получите доступ к набору результатов с помощью: cursor.fetchone (). возврат из команды cursor.execute не возвращает данные.
см .: https://docs.python.org/2/library/sqlite...or.execute
В будущем, пожалуйста, используйте английский, чтобы другие могли извлечь пользу из вашего опыта.
@Larz, they fetch the data (e.g. on line 57, line 88) and present them in entry widget. Their question is how to save data back to sqlite db after they have been edited.
[quote='Larz60+' pid='84053' dateline='1561037233']
I have a choice of data in my code:
cursor.execute('SELECT * FROM {}'.format(all_table))
I don't understand how to pass exactly the entry field that I want to edit
cursor.execute("UPDATE {} SET {} WHERE = 1;".format(all_table, table_name))
The update clause is similar to a select query as far as selection criteria is concerned,
so, it would be like:
Update tablename set field1 = newvalue, field2 = newvalue where condition;