db.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import mysql.connector
  2. from mysql.connector import pooling
  3. import os
  4. from typing import List, Dict, Any, Optional
  5. # Database configuration (using environment variables for production)
  6. DB_CONFIG = {
  7. "host": os.getenv("DB_HOST", "127.0.0.1"),
  8. "user": os.getenv("DB_USER", "radionica"),
  9. "password": os.getenv("DB_PASS", "NY9B9VLifDC9ehZ"),
  10. "database": os.getenv("DB_NAME", "radionica3d"),
  11. "port": int(os.getenv("DB_PORT", 3306))
  12. }
  13. # Connection pool
  14. try:
  15. connection_pool = pooling.MySQLConnectionPool(
  16. pool_name="radionica_pool",
  17. pool_size=10,
  18. pool_reset_session=True,
  19. **DB_CONFIG
  20. )
  21. print("Database connection pool created successfully")
  22. except mysql.connector.Error as err:
  23. print(f"Error creating connection pool: {err}")
  24. connection_pool = None
  25. def get_connection():
  26. """Get a connection from the pool"""
  27. if connection_pool:
  28. return connection_pool.get_connection()
  29. return mysql.connector.connect(**DB_CONFIG)
  30. def execute_query(query: str, params: tuple = ()) -> List[Dict[str, Any]]:
  31. """Execute a SELECT query and return results as a list of dictionaries"""
  32. conn = get_connection()
  33. cursor = conn.cursor(dictionary=True)
  34. try:
  35. cursor.execute(query, params)
  36. result = cursor.fetchall()
  37. return result
  38. finally:
  39. cursor.close()
  40. conn.close()
  41. def execute_commit(query: str, params: tuple = ()) -> int:
  42. """Execute an INSERT/UPDATE/DELETE query and return the last inserted ID"""
  43. conn = get_connection()
  44. cursor = conn.cursor()
  45. try:
  46. cursor.execute(query, params)
  47. conn.commit()
  48. return cursor.lastrowid
  49. finally:
  50. cursor.close()
  51. conn.close()
  52. def execute_batch(query: str, params_list: List[tuple]):
  53. """Execute multiple queries in a single transaction"""
  54. conn = get_connection()
  55. cursor = conn.cursor()
  56. try:
  57. cursor.executemany(query, params_list)
  58. conn.commit()
  59. finally:
  60. cursor.close()
  61. conn.close()