From 096efb7929cc0df2ea017b3664e7d9cccae8ad9b Mon Sep 17 00:00:00 2001 From: "Denis V." Date: Tue, 10 Mar 2026 01:03:29 +0300 Subject: [PATCH] Add environment configuration, some fixes in main.py (size). --- .env => .env_example | 1 + README.md | 69 ++++++++++++++++++++++++++++++++++++++------ main.py | 31 +++++++++++++------- requirements.txt | 4 +++ 4 files changed, 85 insertions(+), 20 deletions(-) rename .env => .env_example (91%) create mode 100644 requirements.txt diff --git a/.env b/.env_example similarity index 91% rename from .env rename to .env_example index cddec1c..0b69a40 100644 --- a/.env +++ b/.env_example @@ -4,6 +4,7 @@ POSTGRES_PASS = pass POSTGRES_HOST = localhost POSTGRES_PORT = 5432 +NEO_ACTIVE=false NEO_USER=neo4j NEO_PASS=pass NEO_HOST=neo4j://localhost:7687 \ No newline at end of file diff --git a/README.md b/README.md index 5e42353..061824b 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,70 @@ ### Пример приложения для работы с БД -Используется: -- PyQt5 -- PostgresSQL (psycopg2) -- Neo4j +Небольшое десктоп‑приложение на PyQt5 для работы с PostgreSQL и Neo4j. -Postgres: +### Стек + +- PyQt5 — графический интерфейс +- PostgreSQL (psycopg2) — реляционная БД для пользователей +- Neo4j — графовая БД для фильмов +- python-dotenv — загрузка параметров подключения из файла `.env` + +### Скриншоты + +**PostgreSQL:** ![form.png](form.png) -Neo4j: +**Neo4j:** ![neo_form.png](neo_form.png) -### Подключение к БД +### Требования -Для подключения к БД указать в .env необходимые данные. -Для выборки данных из Neo4j должен быть создан обучающий граф фильмов. \ No newline at end of file +- Python 3.10+ +- Установленный PostgreSQL и доступ к серверу БД +- Установленный Neo4j и загруженный обучающий граф фильмов (Movie Graph example) + +### Настройка окружения + +1. Переименовать файл примера переменных окружения `.env_example` в `.env`: + + + Затем откройте `.env` и при необходимости измените значения: + +```env +POSTGRES_USER=postgres +POSTGRES_DB=university +POSTGRES_PASS=your_password +POSTGRES_HOST=localhost +POSTGRES_PORT=5432 + +NEO_ACTIVE=false # включить Neo4j-часть приложения, установив true +NEO_USER=neo4j +NEO_PASS=your_password +NEO_HOST=neo4j://localhost:7687 +``` + +2. Создайте и активируйте виртуальное окружение (Windows, PowerShell): + +```powershell +cd C:\Users\Litoq\Documents\Projects\db_example_app +py -m venv .venv +.\.venv\Scripts\Activate.ps1 +``` + +3. Установите зависимости: + +```powershell +pip install -r requirements.txt +``` + +### Запуск приложения + +В активированном виртуальном окружении выполните: + +```powershell +py main.py +``` + +Приложение подключится к PostgreSQL, создаст БД/таблицу и тестовые данные (если их ещё нет), выполнит запрос к Neo4j (если активно) и отобразит результаты в двух окнах. \ No newline at end of file diff --git a/main.py b/main.py index 41f931f..b41af49 100644 --- a/main.py +++ b/main.py @@ -111,7 +111,7 @@ class MainWindow(QMainWindow): # You must call the super class method QMainWindow.__init__(self) - self.setMinimumSize(QSize(480, 80)) # Set sizes + self.setMinimumSize(QSize(640, 480)) # Set sizes self.setWindowTitle("postgre") # Set the window title central_widget = QWidget(self) # Create a central widget self.setCentralWidget(central_widget) # Install the central widget @@ -202,7 +202,14 @@ class NeoWindow(QWidget): if __name__ == "__main__": import sys - conn = psycopg2.connect("user=postgres password=456 host=localhost port=5432") + conn = psycopg2.connect( + "user={0} password={1} host={2} port={3}".format( + POSTGRES_USER, + POSTGRES_PASS, + POSTGRES_HOST, + POSTGRES_PORT, + ) + ) createuUiversityDB(conn) @@ -222,15 +229,17 @@ if __name__ == "__main__": mw.load_data(users) mw.show() - URI = NEO_HOST - AUTH = (NEO_USER, NEO_PASS) + if os.getenv('NEO_ACTIVE') == 'true': + URI = NEO_HOST + AUTH = (NEO_USER, NEO_PASS) - with GraphDatabase.driver(URI, auth=AUTH) as driver: - records, summary, keys = driver.execute_query( - "MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties" - ) + with GraphDatabase.driver(URI, auth=AUTH) as driver: + records, summary, keys = driver.execute_query( + "MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties" + ) + + neo_window = NeoWindow(mw) + neo_window.load_data(records) + neo_window.show() - neo_window = NeoWindow(mw) - neo_window.load_data(records) - neo_window.show() sys.exit(app.exec()) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..84bbb8d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +psycopg2-binary +neo4j +PyQt5 +python-dotenv