From ac82f7308b717ce942f467c8c2cd7dbe8dc139d3 Mon Sep 17 00:00:00 2001 From: Telman Nuruzov Date: Thu, 19 Mar 2026 22:11:21 +0300 Subject: [PATCH 1/2] Lab08 submission - Telman --- .env.example | 5 ++++ .gitignore | 15 ++++++++++++ func.sql | 23 ++++++++++++++++++ requirements.txt | 3 +++ task4.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 func.sql create mode 100644 requirements.txt create mode 100644 task4.py diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..b501f49 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +DB_NAME=lab08 +DB_USER=postgres +DB_PASSWORD=your_password +DB_HOST=localhost +DB_PORT=your_port \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f79909 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# env (пароли и секреты) +.env + +# python +__pycache__/ +*.pyc + +# vscode +.vscode/ + +# mac/windows мусор +.DS_Store +Thumbs.db + +.venv/ \ No newline at end of file diff --git a/func.sql b/func.sql new file mode 100644 index 0000000..b4cee8b --- /dev/null +++ b/func.sql @@ -0,0 +1,23 @@ +DROP FUNCTION IF EXISTS get_coordinates(); + +CREATE FUNCTION get_coordinates() +RETURNS TABLE ( + airport_code CHAR(3), + coordinates TEXT +) +AS $$ +BEGIN + RETURN QUERY + SELECT + a.airport_code, + a.coordinates::TEXT + FROM airports_data a + WHERE + (a.coordinates[0] BETWEEN 35 AND 50) + AND + (a.coordinates[1] BETWEEN 35 AND 50) + LIMIT 50; +END; +$$ LANGUAGE plpgsql; + +--SELECT * FROM get_coordinates(); \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..64445b2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +psycopg2==2.9.11 +geopy==2.4.1 +python-dotenv==1.0.1 \ No newline at end of file diff --git a/task4.py b/task4.py new file mode 100644 index 0000000..f7a58a1 --- /dev/null +++ b/task4.py @@ -0,0 +1,62 @@ +import psycopg2 +from geopy.geocoders import Nominatim +import time +import os +from dotenv import load_dotenv + +load_dotenv() + +conn = psycopg2.connect( + dbname=os.getenv("DB_NAME"), + user=os.getenv("DB_USER"), + password=os.getenv("DB_PASSWORD"), + host=os.getenv("DB_HOST"), + port=os.getenv("DB_PORT") +) + +cur = conn.cursor() + +cur.execute(""" +CREATE TABLE IF NOT EXISTS Address ( + address_id SERIAL PRIMARY KEY, + address_text TEXT, + address_x FLOAT, + address_y FLOAT +); +""") + +cur.execute("SELECT * FROM get_coordinates();") +rows = cur.fetchall() + +geolocator = Nominatim(user_agent="geo_app") + +for row in rows: + coords = row[1] + + coords = coords.strip("()").split(",") + + lat = float(coords[0]) + lon = float(coords[1]) + + try: + location = geolocator.reverse(f"{lat}, {lon}") + + if location: + address = location.address + + cur.execute(""" + INSERT INTO Address (address_text, address_x, address_y) + VALUES (%s, %s, %s) + """, (address, lat, lon)) + + print(f"[{lat}, {lon}] → {address}") + + time.sleep(1) + + except Exception as e: + print("Error:", e) + +conn.commit() +cur.close() +conn.close() + From f6b47061b4f6515ba134e92203bcddd56918842c Mon Sep 17 00:00:00 2001 From: Tem4ik <136071674+Telman3000@users.noreply.github.com> Date: Thu, 19 Mar 2026 22:16:09 +0300 Subject: [PATCH 2/2] Remove commented lines and clean up .gitignore --- .gitignore | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 1f79909..97cd5e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,11 @@ -# env (пароли и секреты) .env -# python __pycache__/ *.pyc -# vscode .vscode/ -# mac/windows мусор .DS_Store Thumbs.db -.venv/ \ No newline at end of file +.venv/