load_products.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/home/superti/miniconda3/envs/pedidos_express/bin/python
  2. import getpass
  3. DB_NAME = "pedidos_express"
  4. DB_USER = "superti"
  5. DB_PASSWORD = ""
  6. DB_HOST = "localhost"
  7. DB_PORT = 5432
  8. import psycopg2
  9. from psycopg2 import sql
  10. import csv
  11. def load_csv_to_db(csv_file_path):
  12. try:
  13. # Connect to PostgreSQL server
  14. conn = psycopg2.connect(
  15. dbname=DB_NAME,
  16. user=DB_USER,
  17. password=DB_PASSWORD,
  18. host=DB_HOST,
  19. port=DB_PORT
  20. )
  21. cursor = conn.cursor()
  22. print(f"Connected to database {DB_NAME}")
  23. with open(csv_file_path, 'r', encoding='utf-8') as f:
  24. reader = csv.reader(f)
  25. headers = next(reader) # Get the header row
  26. print(f"CSV Headers: {headers}")
  27. # Insert data into the table
  28. # Define the expected columns in order
  29. expected_columns = ['id', 'name', 'type', 'description', 'price', 'image', 'status', 'promo_id', 'promo_price', 'promo_day']
  30. insert_query = sql.SQL("""
  31. INSERT INTO products ({fields}) VALUES ({placeholders})
  32. """).format(
  33. fields=sql.SQL(', ').join(map(sql.Identifier, expected_columns)),
  34. placeholders=sql.SQL(', ').join(sql.Placeholder() * len(expected_columns))
  35. )
  36. for row in reader:
  37. id = int(row[0])
  38. name = row[1]
  39. type = row[2]
  40. description = row[5]
  41. price = int(row[6])
  42. image = f"https://fudo-apps-storage.s3.sa-east-1.amazonaws.com/production/113378/common/products/{id}"
  43. status = 1
  44. promo_id = None
  45. promo_price = None
  46. promo_day = None
  47. cursor.execute(insert_query, (id, name, type, description, price, image, status, promo_id, promo_price, promo_day))
  48. conn.commit()
  49. print(f"Data loaded into products successfully.")
  50. cursor.close()
  51. conn.close()
  52. except Exception as e:
  53. print(f"Error: {e}")
  54. if __name__ == "__main__":
  55. import sys
  56. import os
  57. if len(sys.argv) != 2:
  58. print("Usage: python load_products.py <path_to_csv_file>")
  59. else:
  60. DB_PASSWORD = getpass.getpass(prompt='Enter database password: ')
  61. csv_file_path = sys.argv[1]
  62. csv_file_path = os.path.abspath(csv_file_path)
  63. load_csv_to_db(csv_file_path)