Jestem w trakcie przekształcania kodu Pythona na nowe Pandy oparte na SQLAlchemy 0.14.1.W jaki sposób pandas.read_sql_query() może wysłać zapytanie do tabeli TEMP?
Wspólny wzór używamy jest (ogólnie):
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()
Teraz, gdy połączenie jest zamykane tabel TEMP są usuwane przez serwer DB. Jednak ponieważ ostateczne zapytanie wyboru korzysta z tego samego połączenia/sesji, może uzyskać dostęp do tabel.
Jak mogę osiągnąć podobne przy użyciu SQLAlchemy i pd.read_sql_query()?
Na przykład:
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)
daje błąd DB że tmptable tabeli TEMP nie istnieje. Prawdopodobnie dzieje się tak dlatego, że przekazanie silnika do read_sql_query() wymaga otwarcia nowego połączenia, które ma niezależny zakres sesji i dlatego nie może zobaczyć tabeli TEMP. Czy to rozsądne założenie?
Czy istnieje sposób obejścia tego? (przekazywanie połączenia do read_sql_query() nie jest obsługiwane)
(Wiem, że mogę połączyć SQL w jeden ciąg z rozdzielaniem instrukcji, ale jest to uproszczenie rzeczywistej sytuacji, w której tabele TEMP są stworzone przez wiele funkcji, które wymagają zagnieżdżenia innych użytkowników w głąb 3-4, więc aby to osiągnąć, potrzebna jest implementacja warstwy, która może doprowadzić do połączenia SQL w wielu połączeniach przed ich wydaniem, co wolałbym uniknąć, jeśli istnieje lepszy sposób)
Używanie -
Pandy: 0.14.1
sqlalchemy: 0.9.7
pyodbc: 3.0.6
Win7 x86_64 dystrybucja Zadaszenie Pythona (Python 2.7.6)
Josh Kuhna Netezza SQLAlchemy dialekt z https://github.com/deontologician/netezza_sqlalchemy
Czy możesz otworzyć problem z Github jako żądanie ulepszenia? Zobacz https://github.com/pydata/pandas/issues – joris
Zobacz dalej https://github.com/pydata/pandas/issues/8533 – joris