我正在將Python代碼轉換爲新的基於SQLAlchemy的Pandas 0.14.1。pandas.read_sql_query()如何查詢TEMP表?
我們使用了常用的模式是(一般):
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()
現在,一旦連接關閉時,臨時表由DB服務器被清除。但是,由於最終選擇查詢使用相同的連接/會話,因此可以訪問這些表。
我該如何使用SQLAlchemy和pd.read_sql_query()來實現類似的功能?
例如:
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)
產生一個DB錯誤,該TEMP表tmptable不存在。據推測這是因爲將引擎傳遞給read_sql_query()需要它打開一個具有獨立會話範圍的新連接,因此無法看到TEMP表。這是一個合理的假設嗎?
有沒有辦法解決這個問題? (不支持將連接傳遞給read_sql_query())
(我知道我可以將SQL連接成一個單獨的字符串,用於分隔語句,但這是對TEMP表的實際情況的簡化由多個函數創建,這些函數調用其他嵌套深度爲3-4的層次。因此,要實現這一點,需要實現一個層,而不是在發出多個調用之前合併SQL,而如果有更好的方法,我寧願避免實現)
使用 -
熊貓:0.14.1
SQLAlchemy的:0.9.7
pyodbc:3.0.6
Win7的x86_64的雨棚Python發行(Python的2.7.6)從https://github.com/deontologician/netezza_sqlalchemy
你可以打開一個github問題作爲一個增強請求嗎?見https://github.com/pydata/pandas/issues – joris 2014-10-10 11:21:48
請參閱https://github.com/pydata/pandas/issues/8533 – joris 2014-10-10 17:27:01