Используемые библиотеки:
- PyQt6
- dnspython
- mysql-connector-python
Проект следует запускать через файл - executable.py
Desktop-application-for-ordering-a-pass
├─ assets
├─ configuration
├─ data
├─ database
├─ helpers
├─ interface
├─ executable.py ←-THIS
├─ README.md
└─ venv_activate.bat
Для запуска проекта необходимо находиться в корневой папке Desktop-application-for-ordering-a-pass.
После мы открываем командную строку в нашей папке или с помощью команды cd переходим к нашему проекту (пример: cd D:\Project\GitHub\Desktop-application-for-ordering-a-pass
) и запускаем скрипт путем ввода в консоль команды: python.exe executable.py
Также перед запуском проекта в обязательном порядке нужно изменить импорты и конфигурацию подключения к БД.
- Все импорты находятся в файле
path.py
в папкеconfiguration
. В этом файле нужно поменять только абсолютный путь до папки с проектом. - Конфигурация подключения к БД находится в фале
config.py
в папкеdatabase
. В этом файле вам нужно изменить настройки подключения к БД на свои.
Для быстрого развертывания понадобится программа MySQL Workbench. С помощью неё можно быстро и легко через графический интерфейс управлять базой данных, а также создавать модели ER диаграмм, который в последующем можно преобразовывать в SQL скрипты.
В проекте присутствует SQL_Script.sql
для быстрого развертывания БД. Чтобы загрузить скрипт для этого в программе
MySQL Workbench нажимаем на "File" в левом верхнем углу и выбираем
пункт "Open SQL Script..." , затем в окне выбираем файл SQL_Script.sql и открываем его, файл находится в
../database/SQL_Script.sql
. После открытия файла
в области редактирования кода на верхней панели инструментов выполняем скрипт (значок молнии на панели инструментов).
Путь до файла "SQL_Script.sql":
Desktop-application-for-ordering-a-pass
├─ assets
├─ configuration
├─ data
├─ database
│ ├─ config.py
│ ├─ connect_db.py
│ ├─ Models.mwb
│ ├─ Models.mwb.bak
│ ├─ requests.py
│ ├─ SQL_Script.sql ←-THIS
│ └─ SQL.sql
├─ helpers
├─ interface
├─ executable.py
├─ README.md
└─ venv_activate.bat
Я могу забыть поменять скрипт в описании проекта, поэтому если у вас что-то будет не работать советую следовать
первому пункту. Для того чтобы загрузить скрипт нажимаем на "File" в левом верхнем углу и выбираем пункт
"New Query Tab". В новое открывшееся окно вставляем скрипт и в области редактирования кода на верхней панели
инструментов выполняем его (значок молнии на панели инструментов).
Скрипт который нужно вставить:
-- MySQL Script generated by MySQL Workbench
-- Wed Mar 22 00:31:03 2023
-- Model: New Model Version: 1.0
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`email` VARCHAR(255) NOT NULL,
`login` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`receiving_party`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`receiving_party` (
`id` INT NOT NULL AUTO_INCREMENT,
`division` VARCHAR(255) NOT NULL,
`FIO` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`pass_information`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`pass_information` (
`id` INT NOT NULL AUTO_INCREMENT,
`date_from` DATE NOT NULL,
`date_by` DATE NOT NULL,
`visit_purpose` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`visitor_information`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`visitor_information` (
`id` INT NOT NULL AUTO_INCREMENT,
`surname` VARCHAR(255) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`patronymic` VARCHAR(255) NOT NULL,
`phone` VARCHAR(12) NULL,
`email` VARCHAR(255) NOT NULL,
`organization` VARCHAR(255) NULL,
`note` VARCHAR(255) NOT NULL,
`birthdate` DATE NOT NULL,
`passport_series` VARCHAR(4) NOT NULL,
`passport_number` VARCHAR(6) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`documents_personal`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`documents_personal` (
`id` INT NOT NULL AUTO_INCREMENT,
`document` VARCHAR(64) NOT NULL,
`photo` LONGBLOB NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`personal_visit`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`personal_visit` (
`id` INT NOT NULL AUTO_INCREMENT,
`users_id` INT NOT NULL,
`pass_information_id` INT NOT NULL,
`receiving_party_id` INT NOT NULL,
`visitor_information_id` INT NOT NULL,
`documents_id` INT NOT NULL,
`creation_time` DATETIME NOT NULL,
`status` VARCHAR(30) NOT NULL,
`reason` VARCHAR(255) NULL DEFAULT 'None',
PRIMARY KEY (`id`, `users_id`, `pass_information_id`, `receiving_party_id`, `visitor_information_id`, `documents_id`),
INDEX `fk_personal_visit_users_idx` (`users_id` ASC) VISIBLE,
INDEX `fk_personal_visit_receiving_party1_idx` (`receiving_party_id` ASC) VISIBLE,
INDEX `fk_personal_visit_information_for_the_pass1_idx` (`pass_information_id` ASC) VISIBLE,
INDEX `fk_personal_visit_visitor_information1_idx` (`visitor_information_id` ASC) VISIBLE,
INDEX `fk_personal_visit_documents1_idx` (`documents_id` ASC) VISIBLE,
CONSTRAINT `fk_personal_visit_users`
FOREIGN KEY (`users_id`)
REFERENCES `mydb`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_personal_visit_receiving_party1`
FOREIGN KEY (`receiving_party_id`)
REFERENCES `mydb`.`receiving_party` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_personal_visit_information_for_the_pass1`
FOREIGN KEY (`pass_information_id`)
REFERENCES `mydb`.`pass_information` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_personal_visit_visitor_information1`
FOREIGN KEY (`visitor_information_id`)
REFERENCES `mydb`.`visitor_information` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_personal_visit_documents1`
FOREIGN KEY (`documents_id`)
REFERENCES `mydb`.`documents_personal` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`documents_group`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`documents_group` (
`id` INT NOT NULL AUTO_INCREMENT,
`document` VARCHAR(64) NOT NULL,
`visitor_list` VARCHAR(64) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`group_visit`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`group_visit` (
`id` INT NOT NULL AUTO_INCREMENT,
`users_id` INT NOT NULL,
`pass_information_id` INT NOT NULL,
`receiving_party_id` INT NOT NULL,
`visitor_information_id` INT NOT NULL,
`documents_id` INT NOT NULL,
`creation_time` DATETIME NOT NULL,
`status` VARCHAR(30) NOT NULL,
`reason` VARCHAR(255) NULL DEFAULT 'None',
PRIMARY KEY (`id`, `users_id`, `pass_information_id`, `receiving_party_id`, `visitor_information_id`, `documents_id`),
INDEX `fk_personal_visit_users_idx` (`users_id` ASC) VISIBLE,
INDEX `fk_personal_visit_receiving_party1_idx` (`receiving_party_id` ASC) VISIBLE,
INDEX `fk_personal_visit_information_for_the_pass1_idx` (`pass_information_id` ASC) VISIBLE,
INDEX `fk_personal_visit_visitor_information1_idx` (`visitor_information_id` ASC) VISIBLE,
INDEX `fk_group_visit_documents_group1_idx` (`documents_id` ASC) VISIBLE,
CONSTRAINT `fk_personal_visit_users0`
FOREIGN KEY (`users_id`)
REFERENCES `mydb`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_personal_visit_receiving_party10`
FOREIGN KEY (`receiving_party_id`)
REFERENCES `mydb`.`receiving_party` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_personal_visit_information_for_the_pass10`
FOREIGN KEY (`pass_information_id`)
REFERENCES `mydb`.`pass_information` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_personal_visit_visitor_information10`
FOREIGN KEY (`visitor_information_id`)
REFERENCES `mydb`.`visitor_information` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_group_visit_documents_group1`
FOREIGN KEY (`documents_id`)
REFERENCES `mydb`.`documents_group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;