Code bám theo: Phu dao 5.2_Crypto Day du lieu ve PostgreSQL (20 nam).ipynb
Nhiều người mới học Python Database nhìn thấy sqlalchemy.create_engine(...) rồi nghĩ đây chỉ là “một dòng code kết nối database”. Thực ra trong flow của notebook này, SQLAlchemy đang giữ vai trò là lớp trung gian cực quan trọng giữa pandas và PostgreSQL.
Nếu tách notebook ra theo từng lớp kỹ thuật, ta sẽ thấy:
Lớp 1: lấy dữ liệu từ Binance
Hàm loaddataBinance_FromTo_Split() dùng ccxt để kéo OHLCV, sau đó đưa về DataFrame với các cột:
– Timestamp
– Open
– High
– Low
– Close
– Volume
Tiếp theo code đổi Timestamp sang Datetime, rồi thêm:
– Symbol
– Timeframe
Cuối cùng DataFrame được chuẩn hóa lại thành:
Symbol, Datetime, Open, High, Low, Close, Volume, Timeframe
Lớp 2: SQLAlchemy đứng giữa DataFrame và PostgreSQL
Đây là lúc notebook dùng:
python
connection_string = f"postgresql+psycopg2://{user}:{password}@{host}:{port}/{database}"
engine = sqlalchemy.create_engine(connection_string)
Ở đây có 3 lớp thư viện đang phối hợp:
– pandas: giữ dữ liệu dạng bảng
– sqlalchemy: tạo engine, quản lý dialect kết nối
– psycopg2: driver thật sự nói chuyện với PostgreSQL
Nói ngắn gọn:
– pandas biết dữ liệu là gì
– SQLAlchemy biết gửi dữ liệu đi qua cổng nào
– psycopg2 là người lái xe đi tới PostgreSQL
Lớp 3: đẩy bảng vào database
Notebook dùng:
python
data.to_sql(table_name, con=engine, if_exists='append', index=False, schema=schema_name)
Dòng này có nghĩa:
– lấy toàn bộ DataFrame
– map cột của pandas sang cột bảng SQL
– append dữ liệu vào bảng public.trading_data_crypto
Flow kỹ thuật tóm tắt
text
ccxt -> DataFrame OHLCV
-> thêm Datetime / Symbol / Timeframe
-> SQLAlchemy engine
-> psycopg2 driver
-> PostgreSQL table
Insight kỹ thuật đáng nói
Điểm mạnh nhất của SQLAlchemy trong flow này không phải “kết nối được”, mà là nó tạo ra một interface đủ chuẩn để:
– pandas.to_sql() ghi dữ liệu
– pandas.read_sql() đọc dữ liệu ngược lại
– và sau này có thể đổi chiến lược đọc/ghi mà không phải đập toàn bộ pipeline
Pitfall kỹ thuật
- Nhiều người tưởng chỉ cần có
SQLAlchemy là đủ, nhưng thiếu driver psycopg2 thì PostgreSQL vẫn không nói chuyện được
to_sql(..., if_exists='append') rất tiện, nhưng nếu không có khóa chống trùng thì dữ liệu có thể bị append lặp
- Cột thời gian nếu không chuẩn hóa trước khi đẩy xuống DB sẽ gây rối ở bước query sau này
Góc nhìn trader thực chiến: trong hệ thống data cho Auto Trading, SQLAlchemy không phải phần phụ. Nó là lớp giúp DataFrame rời khỏi notebook tạm thời và bước vào một kho dữ liệu có thể truy vấn lại, lọc lại và tái sử dụng về sau.
Comment SQLA nếu bạn muốn mình viết tiếp bài riêng về pandas + sqlalchemy + psycopg2 nên chia vai thế nào trong hệ thống dữ liệu.
Bài viết chia sẻ góc nhìn kỹ thuật và vận hành dữ liệu, không phải khuyến nghị đầu tư.