Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa trích xuất dữ liệu từ Excel sang PostgreSQL bằng Python

Cao Minh Hà 24/03/2026 14:05 117 lượt xem 1 trả lời

Chào các bạn trong diễn đàn,

Dạo này mình đang có nhu cầu đẩy dữ liệu từ file Excel (định kỳ hàng ngày) lên một CSDL PostgreSQL để tiện cho việc phân tích và báo cáo sâu hơn. Mình đã thử qua Power Query nhưng cảm thấy hơi hạn chế khi xử lý các logic phức tạp và cần tùy biến cao. Sau một thời gian tìm hiểu, mình phát hiện ra có thể dùng Python để làm việc này khá hiệu quả.

Mình muốn chia sẻ với mọi người một cách thức đơn giản để tự động hóa việc này, hy vọng có thể giúp ích cho ai đó đang gặp tình huống tương tự.

Các bước thực hiện:

  • Chuẩn bị dữ liệu Excel: Đảm bảo file Excel của bạn có cấu trúc rõ ràng, mỗi cột có tiêu đề.
  • Cài đặt thư viện Python: Cần cài đặt pandas để đọc file Excel và psycopg2 để kết nối với PostgreSQL. Bạn có thể cài đặt bằng pip:
    pip install pandas psycopg2-binary
  • Viết script Python:
import pandas as pd
import psycopg2

# Thông tin kết nối PostgreSQL
db_params = {
    'database': 'your_db',
    'user': 'your_user',
    'password': 'your_password',
    'host': 'localhost',
    'port': '5432'
}

# Đường dẫn đến file Excel
excel_file = 'your_data.xlsx'

try:
    # Đọc dữ liệu từ Excel
    df = pd.read_excel(excel_file)

    # Kết nối tới PostgreSQL
    conn = psycopg2.connect(**db_params)
    cur = conn.cursor()

    # Tạo câu lệnh SQL INSERT (thay 'your_table' bằng tên bảng của bạn)
    # Giả định các cột trong Excel khớp với các cột trong bảng PostgreSQL
    cols = "",join(df.columns)
    placeholders = ",".join(["%s"] * len(df.columns))
    insert_query = f"INSERT INTO your_table ({cols}) VALUES ({placeholders})"

    # Thực thi câu lệnh INSERT cho từng dòng dữ liệu
    for index, row in df.iterrows():
        cur.execute(insert_query, tuple(row))

    # Lưu thay đổi
    conn.commit()
    print("Dữ liệu đã được tải lên PostgreSQL thành công!")

except (Exception, psycopg2.Error) as error:
    print(f"Lỗi khi tải dữ liệu: {error}")

finally:
    # Đóng kết nối
    if conn:
        cur.close()
        conn.close()
        print("Kết nối PostgreSQL đã đóng.")
  • Lên lịch chạy tự động: Sử dụng Task Scheduler (Windows) hoặc cron (Linux/macOS) để chạy script này định kỳ.
  • Cách này giúp mình tiết kiệm rất nhiều thời gian và giảm thiểu sai sót so với việc nhập liệu thủ công. Hy vọng chia sẻ này hữu ích cho mọi người!

    Có bạn nào có kinh nghiệm hoặc cách làm khác hiệu quả hơn, chia sẻ cùng mình nhé!

    5

    Chào bạn,

    Rất hay khi bạn chia sẻ về việc dùng Python để tự động hóa việc đẩy dữ liệu từ Excel sang PostgreSQL. Mình cũng từng gặp khó khăn tương tự với Power Query khi xử lý các yêu cầu phức tạp hơn.

    Bạn có thể chia sẻ thêm về thư viện Python nào bạn thường dùng cho việc này không? Mình đang quan tâm đến pandaspsycopg2, không biết bạn có kinh nghiệm với chúng không?

    1

    Bạn cần đăng nhập để trả lời chủ đề này.

    Đăng nhập Đăng ký