Активное подключение к БД

99
04 октября 2019, 02:50

Подскажите как постоянно отправлять данные в бд. Я написал мини-прогу которая отправляет данные в бд, но заметил один момент если подождать N время соединение разрываеться, я когда писал подобное приложение в терминале, я там использовал цикл и соединение было всегда активное, а сейчас интерфейс делаю и не знаю как это реализовать.

Мой код:

import pymysql.cursors 
import pymysqlpool 
from tkinter import * 
  
# Подключение к БД 
connection = pymysql.connect(host='127.0.0.1', 
                             user='root', 
                             password='', 
                             db='python', 
                             charset='utf8mb4', 
                             cursorclass=pymysql.cursors.DictCursor, 
							 autocommit=True) 
 
  
root = Tk() 
root.title("Считыватель Штрих кодов и комит в БД") 
 
 
 
def func(event): 
	label = Label(text = name.get()) 
	 
	try: 
		with connection.cursor() as cursor: 
			# Отправка SQL запроса 
			sql = "INSERT INTO `scaner` (`number`) VALUES (%s)" 
			cursor.execute(sql, (label['text'])) 
 
		# Сохранение изменения 
		connection.commit() 
		 
 
	finally: 
		print(label['text']) 
		name_entry.delete(0, END) 
root.bind('<Return>', func)	 
def display_full_name(): 
	 
	label = Label(text = name.get()) 
	 
	try: 
		with connection.cursor() as cursor: 
			# Отправка SQL запроса 
			sql = "INSERT INTO `scaner` (`number`) VALUES (%s)" 
			cursor.execute(sql, (label['text'])) 
 
		# Сохранение изменения 
		connection.commit() 
 
	finally: 
		print(label['text']) 
		name_entry.delete(0, END) 
 
 
 
name = StringVar() 
name_label = Label(text="Введите штрихкод:") 
name_label.grid(row=0, column=0, sticky="w") 
name_entry = Entry(textvariable=name) 
name_entry.grid(row=0,column=1, padx=5, pady=5) 
message_button = Button(text="Отправить", command=display_full_name) 
message_button.grid(row=2,column=1, padx=5, pady=5, sticky="e") 
 
 
 
root.mainloop() 
	

Answer 1

я бы сделал на вашем месте что-то вроде класса-коннектора к БД, у которого, например будет метод execute, в котором перед исполнением будете проверять активно ли соединение с бд, если нет, то делать реконнект. Что-то вроде такого:

class DBExecutor():
    def __init__(self, **connection_params):
        self._connection_params = connection_params
        self._connection = None
    def _connect(self):
        self._connection = pymysql.connect(**self._connection_params)
    def execute(self, sql, *args, **kwargs):
        if not (self._connection and self._connection.ping(True)):
            self._connect():
        with self._connection.cursor() as cursor:
            cursor.execute(sql, *args, **kwargs)
        self._connection.commit()
# использование
db_executor = DBExecutor(host='127.0.0.1', user='root', password='', db='python', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor, autocommit=True)
db_executor.execute("INSERT INTO `scaner` (`number`) VALUES (%s)", ('text',))
READ ALSO
Подсчёт длины блока в символах(ch) css

Подсчёт длины блока в символах(ch) css

Вопрос заключается в следующем: нужно в width передать значение в ch для разных текcтовых блоков по средствам css и html, для того чтобы можно было...

113
Как настроить линтер для html в vscode?

Как настроить линтер для html в vscode?

Возникла необходимость в редактировании html в vscodeПроблема в том, что когда вставляю текст и хочу довести его до ума код отформатирован чёрте...

123
анимация div по клику

анимация div по клику

Использую css анимацию отсюда https://danedengithub

118
Как создать виджет (обратная связь, форма какая-либо..)? [закрыт]

Как создать виджет (обратная связь, форма какая-либо..)? [закрыт]

Подскажите, пожалуйста, где почитать, может где исходники есть этого *** добраВсе, что ни гуглится, так это живосайты и прочее подобное

119