Python Forum
Редактировать данные в sqlite3
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Редактировать данные в sqlite3
#1
Добрый день помогите решить проблему редактирования данных в 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
Reply
#2
После выбора данных с помощью cursor.execute получите доступ к набору результатов с помощью: cursor.fetchone (). возврат из команды cursor.execute не возвращает данные.
см .: https://docs.python.org/2/library/sqlite...or.execute
В будущем, пожалуйста, используйте английский, чтобы другие могли извлечь пользу из вашего опыта.
Reply
#3
@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.
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#4
[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))
Reply
#5
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;
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020