파이썬 코드를 새로운 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)
는 TEMP 테이블 tmptable이 존재하지 않는다는 DB 오류를 얻을 수 있습니다. 아마도 이것은 엔진을 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의 캐노피 파이썬 분포 (파이썬 2.7.6) 당신은 파이썬과 네티을 사용하는 https://github.com/deontologician/netezza_sqlalchemy
향상 요청으로 github 문제를 열 수 있습니까? https://github.com/pydata/pandas/issues – joris
자세한 내용은 https://github.com/pydata/pandas/issues/8533을 참조하십시오. – joris