Тексты программ для БД на языке Рythin. Приложение Листинги
Скачать 37.37 Kb.
|
Приложение 4. Листинги. Содержание 1. Листинги элементов функционального модуля М_Работа с БД…….……....1 2. Листинги элементов функций подсистемы Голосование…………………….5 3. Листинги GUI-интерфейсов для модулей и функций…………….…………. 7 4. Листинги элементов функций подсистемы Администрирование………….10 5. Конфигурирование виртуального хостинга на локальном………………… 12 сервере для инсталляционного тестирования пилотного проекта 1. Листинги элементов функционального модуля М_Работа с БД Листинги функций модуля # Модуль М_Работа с БД # функция-м - подключение к SQL БД (библиотека PyQt_5) # Виджет для ввода имени БД для дальнейшей работы с ней from tkinter import * from tkinter import messagebox def show_message(): messagebox.showinfo("имя БД:", message.get()) root = Tk() root.title("Введите имя БД:") root.geometry("280x110") message = StringVar() message_entry = Entry(textvariable=message) message_entry.place(relx=.5, rely=.1, anchor="c") message_button = Button(text=" Ввод ", command=show_message) message_button.place(relx=.5, rely=.5, anchor="c") root.mainloop() print('Доступ к БД', message.get()) #print(message.get()) name_bd = message.get() from PyQt5 import QtWidgets, QtSql import sys # Создается объект приложения для поддержки БД app = QtWidgets.QApplication(sys.argv) import datetime date = datetime.datetime.today() # форматирование вывода текущего времени print('открыт: ', date.strftime("%d %B %Y - %H.%M")) #txt = input("Введите имя БД: ") # Открываем базу данных MySQL con2 = QtSql.QSqlDatabase.addDatabase ('QMYSQL') con2.setHostName("somehost"); con2.setDatabaseName(name_bd); con2.setUserName("someuser"); con2.setPassword("password"); con2.open(); con2.close() # Модуль М_Работа с БД # функция-м - выполнение запросов к БД (библиотеку PyQt_5) # может быть ввод другой БД Con = QtSql.QSqlDatabase.addDatabase('QMYSQL') Con.setDatabaseName('data.sqlite') Con.open() if 'good' not in con.tables(): query = QtSql.QSqlQuery() query.exec("create table good(id integer primary key autoincrement, goodname text, goodcount integer) ") query.prepare("insert into good values(null, ?, ?)") query.addBindValue('Пароль') query.addBindValue(10) query.exec_() query.prepare("insert into good values(null, ?, ?)") query.bindValue(0, 'Пароль') query.bindValue(1, 10) query.exec_() query.prepare("insert into good values(null, :name, :count)") query.bindValue(':name', 'Пароль') query.bindValue(':count', 10) query.exec_() query.prepare("insert into good values(null, :name, :count)") lst1 = ['Пароль', 'Дата изменения пароля', 'Администратор'] lst2 = [10, 3, 8] query.bindValue(':name', lst1) query.bindValue(':count', lst2) query.execBatch() query.prepare("select * from good order by goodname") query.setForwardOnly(True) query.exec_() # Модуль М_Работа с БД # функция-м – выборка данных из БД и очистка запроса(библиотека PyQt_5) # может быть ввод другой БД from PyQt5 import QtWidgets, QtSql import sys app = QtWidgets.QApplication(sys.argv) con = QtSql.QSqlDatabase.addDatabase('QSQLITE') con.setDatabaseName('data.sqlite') con.open() query = QtSql.QSqlQuery() query.exec("select * from good order by goodname") lst = [] if query.isActive(): query.first() while query.isValid(): lst.append(query.value('goodname') + ': ' + str(query.value('goodcount')) + ' шт.') query.next() for p in lst: print(p) con.close() # Очистка запросаquery = QtSql.QSqlQuery() query.exec("select * from good order by goodname") # Обрабатываем результат запроса query.finish() query.exec("select count(*) as cnt from good") # Работаем с новым запросом # Модуль М_Работа с БД # функция-м - подключение к SQL БД (библиотекa pyodbc) import datetime date = datetime.datetime.today() # форматирование вывода текущего времени print('now ', date.strftime("%d %B %Y - %H.%M")) txt = input("Введите имя БД: ") print("Вы ввели имя БД-", txt) # подключение к SQL базе Region_draftDB и инициализация базы import pyodbc database = txt from datetime import datetime class Sql: # создан класс Sql с применением метода иницализации connect() для подключения к SQL базе данных def __init__(self, database, server="LAPTOP-OCF7SOEG\SQLEXPRESS"): # в конструкторе класса методом __init__ # передается строковое имя сервера # функция подключения к SQL базе данных self.cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};" "Server="+server+";" # строки server и database "Database="+database+";" # передаются в функцию pyodbc.connect() "Trusted_Connection=yes;") # в конце класса создаётся строка, обновляемая с каждым передаваемым запросом - # это позволяет собирать логи, для записи времени используется стандартная библиотека datetime print("Доступ к БД Администратора ") print("подсистемы Администрирование", str(database), "открыт ", date.strftime("%d %B %Y")) print("время открытия БД", date.strftime("%H.%M")) self.query = "-- {}\n\n-- Made in Python".format(datetime.now() .strftime("%d/%m/%Y")) # Модуль М_Работа с БД # функция-м – обращение к столбцам таблиц SQL БД (библиотекa pyodbc) # метод инициализации connect() server="LAPTOP-OCF7SOEG\SQLEXPRESS" cnn = pyodbc.connect("Driver={SQL Server Native Client 11.0};""Server="+server+";""Database="+database+";""Trusted_Connection=yes;") cursor = cnn.cursor() # создаем курсор - специальный объект который делает запросы и получает их результаты # выполнение запроса к БД с использованием SQL-синтаксиса cursor.execute("SELECT Section_legisl,For_init FROM Public_init") # Получен результат сделанного запроса results = cursor.fetchall() print(cnn) print("\n") # контрольная проверка записи в БД #print(results) # закрыть соединение с БД портала cnn.close() # Модуль М_Работа с БД # функция-м - подключение БД Администрирования Admin_pgolos # для изменения паролей депутатов (библиотека pyodbc) import pyodbc database = "Admin_pgolosDB" from datetime import datetime class Sql: # для подключения к БД SQL создан класс Sql def __init__(self, database, server="LAPTOP-OCF7SOEG\SQLEXPRESS"): # в методе инициализации _init_ # передается строковое имя сервера # функция подключения к БД SQL # строка подключения передается в функцию pyodbc.connect() self.cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};" "Server="+server+";" "Database="+database+";" "Trusted_Connection=yes;") # в конце класса создаётся строка, обновляемая с каждым передаваемым запросом - # это позволяет собирать логи, для записи времени используется стандартная библиотека datetime print("\n Для работы с MS SQL Server через программный интерфейс ODBC используется модуль pyodbc") print(" и применен метод инициализации SQL сервера __ init __ ") print("Доступ к базе данных по результатам онлайн-голосования по принимаемым законопроектам ") print("регионального уровня", str(database), "открыт методом инициализации * init *") self.query = "-- {}\n\n-- Made in Python".format(datetime.now() .strftime("%d/%m/%Y")) sql = Sql(database) print(sql) # выполнение второго Д/З. Реализовано обращение к SQL базе Region_draftDB # выведен построчно массив значений столбцов Section_legisl и For_init таблицы Public_init базы Region_draftDB server="LAPTOP-OCF7SOEG\SQLEXPRESS" cnn = pyodbc.connect("Driver={SQL Server Native Client 11.0};""Server="+server+";""Database="+database+";""Trusted_Connection=yes;") cursor = cnn.cursor() # создаем курсор - специальный объект который делает запросы и получает их результаты # выполнен SELECT запрос к базе данных, используя SQL-синтаксис # из таблицы sec_rec записи столбца пароль - password cursor.execute("SELECT Sec_rec,For_init FROM password") # Получен результат сделанного запроса results = cursor.fetchall() print(cnn) print("\n") print(results) # закрыть соединение с базой данных Admin_pgolosDB cnn.close() # КОД ДЛЯ ДАЛЬНЕЙШЕЙ РАБОТЫ С БАЗОЙ ДАННЫХ # КОД ВСТАВЛЯТЬ В ЭТО МЕСТО # *Запись в базу* #cursor.execute("insert into Artist values (Null, 'A Aagrh!') ") # Если мы не просто читаем, но и вносим изменения в базу данных - необходимо сохранить транзакцию #conn.commit() # Проверяем результат #cursor.execute("SELECT Name FROM Artist ORDER BY Name LIMIT 3") #results = cursor.fetchall() 2. Листинги элементов функций подсистемы Голосование # Подсистема Голосование # Функция работы со справочниками по законопроектам import sys from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QTextEdit, QGridLayout, QApplication) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): title = QLabel('Раздел законодательства:') author = QLabel('Законопроект:') review = QLabel('Документ законопроекта') titleEdit = QLineEdit() authorEdit = QLineEdit() reviewEdit = QTextEdit() grid = QGridLayout() grid.setSpacing(10) grid.addWidget(title, 1, 0) grid.addWidget(titleEdit, 1, 1) grid.addWidget(author, 2, 0) grid.addWidget(authorEdit, 2, 1) grid.addWidget(review, 3, 0) grid.addWidget(reviewEdit, 3, 1, 5, 1) self.setLayout(grid) self.setGeometry(500, 300, 550, 300) self.setWindowTitle('Справочник по законопроектам') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) # Подсистема Голосование # QComboBox – это виджет, который позволяет пользователю выбирать из списка вариантов (выпадающий список) #!/usr/bin/python3 import sys from PyQt5.QtWidgets import (QWidget, QLabel, QComboBox, QApplication) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.lbl = QLabel("Количественное по большинству", self) combo = QComboBox(self) combo.addItems(["За", "Против", "Воздерживаюсь", "Альтернативное", "Рейтинговое"]) combo.move(50, 50) self.lbl.move(50, 150) combo.activated[str].connect(self.onActivated) self.setGeometry(500, 300, 400, 200) self.setWindowTitle('ГОЛОСОВАНИЕ ПО ЗАКОНОПРОЕКТУ') self.show() def onActivated(self, text): self.lbl.setText(text) self.lbl.adjustSize() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) 3. Листинги специализированных GUI-интерфейсов для модулей и функций # Подсистема Голосование # Form implementation generated from reading ui file 'online_voting.ui' # Created by: PyQt5 UI code generator 5.13.2 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(669, 444) Dialog.setSizeGripEnabled(False) Dialog.setModal(False) self.pushButton = QtWidgets.QPushButton(Dialog) self.pushButton.setGeometry(QtCore.QRect(270, 250, 101, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(Dialog) self.pushButton_2.setGeometry(QtCore.QRect(270, 290, 101, 23)) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_3 = QtWidgets.QPushButton(Dialog) self.pushButton_3.setGeometry(QtCore.QRect(270, 330, 101, 21)) self.pushButton_3.setObjectName("pushButton_3") self.textEdit = QtWidgets.QTextEdit(Dialog) self.textEdit.setGeometry(QtCore.QRect(110, 60, 451, 151)) self.textEdit.setObjectName("textEdit") self.dateEdit = QtWidgets.QDateEdit(Dialog) self.dateEdit.setGeometry(QtCore.QRect(110, 30, 110, 22)) self.dateEdit.setDateTime(QtCore.QDateTime(QtCore.QDate(2020, 5, 28), QtCore.QTime(0, 0, 0))) self.dateEdit.setObjectName("dateEdit") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Голосование. Количественное по большинству голосов")) self.pushButton.setText(_translate("Dialog", "За")) self.pushButton_2.setText(_translate("Dialog", "Против")) self.pushButton_3.setText(_translate("Dialog", "Воздерживаюсь")) self.textEdit.setHtml(_translate("Dialog", "\n" "\n" " Законопроект: Об установлении ставок налога, взимаемого в связи с применением упрощенной системы налогообложения, для отдельных категорий налогоплательщиков \n" " >> %htmlfile% @echo %new_dir% >> %htmlfile% @echo ^ |