убрал закрытия подключения
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-04-11 13:11:42 +10:00
parent f53121aa09
commit 4720aa05bc

View File

@@ -1,17 +1,26 @@
import psycopg2 import psycopg2
from psycopg2.extras import RealDictCursor from psycopg2.extras import RealDictCursor
# Подключение к БД (укажи свои параметры) # Параметры подключения к БД
conn = psycopg2.connect( DB_CONFIG = {
dbname="parsed_url", "dbname": "parsed_url",
user="postgres", "user": "postgres",
password="qwertyqwerty123123", "password": "qwertyqwerty123123",
host="45.129.78.228", "host": "45.129.78.228",
# host="127.0.0.1" "connect_timeout": 10,
connect_timeout=10, "options": "-c statement_timeout=30000"
options="-c statement_timeout=30000" # таймаут запроса 30 сек }
)
conn.autocommit = True # Глобальное подключение к БД
conn = None
def get_connection():
"""Получает подключение к БД, создавая новое при необходимости"""
global conn
if conn is None or conn.closed:
conn = psycopg2.connect(**DB_CONFIG)
conn.autocommit = True
return conn
def close_connection(): def close_connection():
"""Закрывает подключение к БД""" """Закрывает подключение к БД"""
@@ -21,6 +30,7 @@ def close_connection():
conn = None conn = None
# работа с базой данных показывания задач work_parser # работа с базой данных показывания задач work_parser
def create_table(): def create_table():
conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(""" cur.execute("""
@@ -38,10 +48,10 @@ def create_table():
""") """)
print("Таблица work_parser создана или уже существует") print("Таблица work_parser создана или уже существует")
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def insert_task(status, source_url=None, source_id=None, priority=0): def insert_task(status, source_url=None, source_id=None, priority=0):
conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(""" cur.execute("""
@@ -52,10 +62,10 @@ def insert_task(status, source_url=None, source_id=None, priority=0):
task_id = cur.fetchone()[0] task_id = cur.fetchone()[0]
return task_id return task_id
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def get_tasks_offset(limit, offset): def get_tasks_offset(limit, offset):
conn = get_connection()
try: try:
with conn.cursor(cursor_factory=RealDictCursor) as cur: with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute(""" cur.execute("""
@@ -66,10 +76,10 @@ def get_tasks_offset(limit, offset):
tasks = cur.fetchall() tasks = cur.fetchall()
return tasks return tasks
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def delete_task(task_id: int): def delete_task(task_id: int):
conn = get_connection()
try: try:
with conn.cursor(cursor_factory=RealDictCursor) as cur: with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute("DELETE FROM work_parser WHERE id = %s RETURNING *;", (task_id,)) cur.execute("DELETE FROM work_parser WHERE id = %s RETURNING *;", (task_id,))
@@ -79,10 +89,10 @@ def delete_task(task_id: int):
else: else:
return {"message": f"Задача с id {task_id} не найдена"} return {"message": f"Задача с id {task_id} не найдена"}
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def update_task(task_id, **fields): def update_task(task_id, **fields):
conn = get_connection()
try: try:
allowed_fields = ['status', 'started_at', 'finished_at', 'source_url', 'error_message', 'attempts', 'priority'] allowed_fields = ['status', 'started_at', 'finished_at', 'source_url', 'error_message', 'attempts', 'priority']
set_parts = [] set_parts = []
@@ -99,11 +109,11 @@ def update_task(task_id, **fields):
cur.execute(f"UPDATE work_parser SET {set_sql} WHERE id = %s;", values) cur.execute(f"UPDATE work_parser SET {set_sql} WHERE id = %s;", values)
return True return True
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
# Создание и работа с таблицей по созданию и редактированию промтов # Создание и работа с таблицей по созданию и редактированию промтов
def create_table_config_gpt(): def create_table_config_gpt():
conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(""" cur.execute("""
@@ -115,10 +125,10 @@ def create_table_config_gpt():
""") """)
print("Таблица config_gpt создана или уже существует") print("Таблица config_gpt создана или уже существует")
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def update_promt(url: str, name: str, promt: str): def update_promt(url: str, name: str, promt: str):
conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(""" cur.execute("""
@@ -130,21 +140,21 @@ def update_promt(url: str, name: str, promt: str):
""", (url, name, promt)) """, (url, name, promt))
conn.commit() conn.commit()
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def get_promt(promt_name_url): def get_promt(promt_name_url):
conn = get_connection()
try: try:
with conn.cursor(cursor_factory=RealDictCursor) as cur: with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute("SELECT promt FROM config_gpt WHERE url = %s", (promt_name_url,)) cur.execute("SELECT promt FROM config_gpt WHERE url = %s", (promt_name_url,))
promt = cur.fetchone() promt = cur.fetchone()
return promt['promt'] return promt['promt']
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def get_all_promt(): def get_all_promt():
# Возвращает список всех значений поля name из таблицы config_gpt # Возвращает список всех значений поля name из таблицы config_gpt
conn = get_connection()
try: try:
with conn.cursor(cursor_factory=RealDictCursor) as cur: with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute("SELECT * FROM config_gpt") cur.execute("SELECT * FROM config_gpt")
@@ -153,10 +163,10 @@ def get_all_promt():
sources = [{"url": row["url"], "name": row["name"], "promt": row["promt"]} for row in rows] sources = [{"url": row["url"], "name": row["name"], "promt": row["promt"]} for row in rows]
return {"sources": sources} return {"sources": sources}
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def get_all_categories_promt(): def get_all_categories_promt():
conn = get_connection()
try: try:
with conn.cursor(cursor_factory=RealDictCursor) as cur: with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute("SELECT name FROM config_gpt") cur.execute("SELECT name FROM config_gpt")
@@ -164,11 +174,11 @@ def get_all_categories_promt():
return [row["name"] for row in rows] return [row["name"] for row in rows]
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
# Создание, сохранение и работа с таблицей ошибочных ссылок (error_url) # Создание, сохранение и работа с таблицей ошибочных ссылок (error_url)
def create_table_error_url(): def create_table_error_url():
conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(""" cur.execute("""
@@ -180,10 +190,10 @@ def create_table_error_url():
""") """)
print("Таблица error_url создана или уже существует") print("Таблица error_url создана или уже существует")
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def add_error_url(source_url: str, error_sources_url: str): def add_error_url(source_url: str, error_sources_url: str):
conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(""" cur.execute("""
@@ -193,10 +203,10 @@ def add_error_url(source_url: str, error_sources_url: str):
""", (source_url, error_sources_url)) """, (source_url, error_sources_url))
return cur.fetchone()[0] return cur.fetchone()[0]
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def check_error_url(error_sources_url: str) -> bool: def check_error_url(error_sources_url: str) -> bool:
conn = get_connection()
try: try:
with conn.cursor(cursor_factory=RealDictCursor) as cur: with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute(""" cur.execute("""
@@ -208,11 +218,11 @@ def check_error_url(error_sources_url: str) -> bool:
return row is None return row is None
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
# Создание и работа с таблицей источников add_sources # Создание и работа с таблицей источников add_sources
def create_table_add_sourse(): def create_table_add_sourse():
conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(""" cur.execute("""
@@ -223,10 +233,10 @@ def create_table_add_sourse():
""") """)
print("Таблица sourse создана или уже существует") print("Таблица sourse создана или уже существует")
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
def add_sources(url: str, promt: str): def add_sources(url: str, promt: str):
conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(""" cur.execute("""
@@ -237,8 +247,7 @@ def add_sources(url: str, promt: str):
""", (url, promt)) """, (url, promt))
conn.commit() conn.commit()
finally: finally:
if conn: pass # Не закрываем подключение
conn.close()
# Пример использования # Пример использования
# if __name__ == "__main__": # if __name__ == "__main__":