Работа с базой данных sql в python
Рассмотрим пример кода на Python, который создает базу данных SQLite и предоставляет интерфейс пользователя для добавления данных с использованием модуля PyQt5.

Рассмотрим пример кода на Python, который создает базу данных SQLite и предоставляет интерфейс пользователя для добавления и удаления данных с использованием модуля PyQt5.
import sys
import sqlite3
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QPushButton, QVBoxLayout, QWidget, QTableView, QMessageBox
from PyQt5.QtGui import QStandardItemModel, QStandardItem
# Создание базы данных и таблицы
conn = sqlite3.connect(‘database.db‘)
cursor = conn.cursor()
cursor.execute(‘CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)’)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle(«Работа с базой данных»)
self.setGeometry(300, 300, 400, 300)
self.name_input = QLineEdit()
self.age_input = QLineEdit()
self.add_button = QPushButton(«Добавить»)
self.add_button.clicked.connect(self.add_data)
self.view_button = QPushButton(«Просмотреть базу данных»)
self.view_button.clicked.connect(self.view_data)
self.save_button = QPushButton(«Сохранить базу данных»)
self.save_button.clicked.connect(self.save_data)
self.delete_button = QPushButton(«Удалить запись»)
self.delete_button.clicked.connect(self.delete_data)
layout = QVBoxLayout()
layout.addWidget(self.name_input)
layout.addWidget(self.age_input)
layout.addWidget(self.add_button)
layout.addWidget(self.view_button)
layout.addWidget(self.save_button)
layout.addWidget(self.delete_button)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def add_data(self):
name = self.name_input.text()
age = self.age_input.text()
conn.execute(‘INSERT INTO users (name, age) VALUES (?, ?)’, (name, age))
conn.commit()
self.name_input.clear()
self.age_input.clear()
self.name_input.setFocus()
def view_data(self):
result = conn.execute(‘SELECT * FROM users‘)
data = result.fetchall()
# Создание модели и заполнение данными
model = QStandardItemModel()
model.setHorizontalHeaderLabels([‘Имя’, ‘Возраст’])
for row in data:
row_items = [QStandardItem(str(item)) for item in row]
model.appendRow(row_items)
# Создание таблицы для отображения данных
table = QTableView()
table.setModel(model)
# Отображение в новом окне
window = QMainWindow(self)
window.setWindowTitle(«База данных»)
window.setGeometry(300, 300, 400, 300)
window.setCentralWidget(table)
window.show()
def save_data(self):
# Сохранение базы данных в файл
with open(‘database.txt’, ‘w’) as file:
result = conn.execute(‘SELECT * FROM users‘)
data = result.fetchall()
for row in data:
file.write(f»{row[0]}, {row[1]}\n«)
print(«База данных успешно сохранена»)
def delete_data(self):
name = self.name_input.text()
age = self.age_input.text()
# Проверка наличия записи в базе данных
result = conn.execute(‘SELECT * FROM users WHERE name=? AND age=?’, (name, age))
data = result.fetchall()
if len(data) > 0:
# Удаление записи из базы данных
conn.execute(‘DELETE FROM users WHERE name=? AND age=?’, (name, age))
conn.commit()
QMessageBox.information(self, «Успех«, «Запись успешно удалена«)
else:
QMessageBox.warning(self, «Ошибка«, «Запись не найдена«)
self.age_input.clear()
self.name_input.setFocus()
if __name__ == ‘__main__’:
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
В этом примере мы импортируем нужные модули, создаем базу данных SQLite и таблицу. Затем мы создаем класс `MainWindow`, который наследуется от `QMainWindow` и предоставляет интерфейс пользователя для добавления данных.
В конструкторе класса мы определяем виджеты `QLineEdit` для ввода имени и возраста, кнопку `QPushButton` для добавления данных, создаем макет `QVBoxLayout` и устанавливаем его для основного виджета.
Метод `add_data` вызывается при нажатии кнопки «Добавить». Он получает значения из полей ввода, выполняет INSERT-запрос для добавления данных в базу данных, и после этого очищает поля ввода.
В этом примере добавим функцию `view_data`, которая отображает содержимое таблицы базы данных в отдельном окне в виде таблицы. Также добавим кнопку `save_button` и функцию `save_data`, которые сохраняют содержимое базы данных в текстовый файл `database.txt`.
Кроме того, не лишним будет добавление функции `delete_data`, которая удаляет записи из базы данных, соответствующие введенным в поля данных `name_input` и `age_input`. Если запись найдена и успешно удалена, пользователю будет показано диалоговое окно с информацией об успешном удалении. Если запись не найдена, будет показано предупреждающее диалоговое окно.
В методе `__main__` мы создаем экземпляр приложения `QApplication`, создаем окно `MainWindow` и отображаем его. Затем мы запускаем приложение с помощью `app.exec_()` и БИНГО! Мы написали свою программу для работы с базами данных.
Pro
Желающие монетизировать работу портала смогут это сделать путем перевода денег
на
Яндекс.Деньги (ЮМАНИ): 410014991836318
или на
СБЕР 4276 7615 8138 7517.
Спасибо большое за вклад в развитие этого проекта!