Tôi đang trong quá trình chuyển đổi mã Python sang Pandas 0.14.1 dựa trên SQLAlchemy mới.Làm thế nào có thể pandas.read_sql_query() truy vấn một bảng TEMP?
Một mô hình chung chúng tôi sử dụng là (tổng quát):
connection = db.connect() # open connection/session
sql = 'CREATE TEMP TABLE table1 AS SELECT ...'
connection.execute(sql)
... other sql that creates TEMP tables from various joins of previous TEMP tables ...
sql = 'CREATE TEMP TABLE tableN AS SELECT ...'
connection.execute(sql)
result = connection.query('SELECT * FROM tableN WHERE ...')
connection.close()
Bây giờ, khi kết nối được đóng các bảng TEMP đều bị loại bỏ bởi máy chủ DB. Tuy nhiên, khi truy vấn chọn cuối cùng đang sử dụng cùng một kết nối/phiên, nó có thể truy cập các bảng.
Làm cách nào tôi có thể đạt được tương tự bằng cách sử dụng SQLAlchemy và pd.read_sql_query()?
Ví dụ:
engine = sqlalchemy.create_engine('netezza://@mydsn')
connection = engine.connect()
sql = 'CREATE TEMP TABLE tmptable AS SELECT ...'
connection.execute(sql)
result = pd.read_sql_query('SELECT * FROM tmptable WHERE ...', engine)
mang lại một lỗi DB rằng tmptable bảng TEMP không tồn tại. Có lẽ điều này là bởi vì đi qua động cơ để read_sql_query() đòi hỏi nó để mở một kết nối mới trong đó có một phạm vi phiên độc lập và do đó không thể nhìn thấy bảng TEMP. Đó có phải là một giả định hợp lý không?
Có cách nào để giải quyết vấn đề đó không? (chuyển kết nối tới read_sql_query() không được hỗ trợ)
(Tôi biết rằng tôi có thể nối SQL vào một chuỗi đơn lẻ; tách các câu lệnh, nhưng đây là sự đơn giản hóa tình huống thực tế nơi các bảng TEMP là Vì vậy, để đạt được điều đó sẽ yêu cầu thực hiện một lớp hơn có thể kết hợp SQL qua nhiều cuộc gọi trước khi phát hành nó, mà tôi muốn tránh thực hiện nếu có một cách đẹp hơn)
Sử dụng -
Pandas: 0.14.1
SQLAlchemy: 0.9.7
pyodbc: 3.0.6
Win7 x86_64 Canopy Python phân phối (Python 2.7.6) phương ngữ Netezza SQLAlchemy
Josh Kuhn từ https://github.com/deontologician/netezza_sqlalchemy
Bạn có thể mở vấn đề github cho yêu cầu nâng cao này không? Xem https://github.com/pydata/pandas/issues – joris
Xem thêm https://github.com/pydata/pandas/issues/8533 – joris