Python. Работа с базами данных

Будем использовать библиотеку sqlite3, предварительно установив ее командой pip install pysqlite. Также для удобства рекомендуется установить СУБД  SQLiteStudio.

Для следующего примера предполагается наличие базы данных films.db:

import sqlite3

con = sqlite3.connect("films.db")
cur = con.cursor()
result = cur.execute("""SELECT * FROM Films
            WHERE year = 2012""").fetchall()
for elem in result:
    print(elem)
con.close()

Результатом будет кортеж кортежей.

Для запросов очень часто необходимо указывать какие-либо параметры. Для этого вместо значения в запросе указывается вопросительный знак, а затем в итерируемом объекте указываются параметры (здесь подставляются значения 2010 и 90):

result = cur.execute("""SELECT * FROM Films
            WHERE year = ? and duration > ?""",(2010, 90)).fetchall()

Рассмотрим пример программы с графическим пользовательским интерфейсом на PyQT, которая позволяет просматривать информацию о названиях фильмов из базы данных films.bd с выбором жанра. Выбор жанров реализован с помощью выпадающего списка.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidgetItem
from PyQt5 import QtCore, QtGui, QtWidgets
import sqlite3


class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        self.params = {}
        self.con = sqlite3.connect("films.db")
        self.setGeometry(500, 300, 400, 300)
        self.setWindowTitle("Фильмы по жанрам")
        self.comboBox = QtWidgets.QComboBox(self)
        self.comboBox.setGeometry(QtCore.QRect(4, 4, 160, 20))
        self.selectGenres()
        self.pushButton = QtWidgets.QPushButton(self)
        self.pushButton.setGeometry(204, 4, 90, 20)
        self.pushButton.setText( "Пуск")
        self.pushButton.clicked.connect(self.select)
        self.tableWidget = QtWidgets.QTableWidget(self)
        self.tableWidget.setGeometry(QtCore.QRect(4, 30, 392, 260))     

    def selectGenres(self):
        req = "SELECT * from genres"
        cur = self.con.cursor()
        for value, key in cur.execute(req).fetchall():
            self.params[key] = value
        self.comboBox.addItems(list(self.params.keys()))

    def select(self):
        req = "SELECT * FROM Films WHERE genre = {}".format(self.params.get(self.comboBox.currentText()))
        cur = self.con.cursor()
        result = cur.execute(req).fetchall()
        self.tableWidget.setRowCount(len(result))
        self.tableWidget.setColumnCount(len(result[0]))
        for i, elem in enumerate(result):
            for j, val in enumerate(elem):
                self.tableWidget.setItem(i, j, QTableWidgetItem(str(val)))


app = QApplication(sys.argv)
ex = MyWidget()
ex.show()
sys.exit(app.exec_())

Результат работы окна показан на рисунке ниже.

 

Поделиться:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • StumbleUpon
  • Technorati
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.