web-dev-qa-db-fra.com

CX_Oracle - importer des données d'Oracle vers Pandas dataframe

Hy,

Je suis nouveau dans python et je veux importer des données d'une base de données Oracle vers python (cadre de données pandas)) en utilisant cette simple requête

SELECT* 
                FROM TRANSACTION
                WHERE DIA_DAT >=to_date('15.02.28 00:00:00',  'YY.MM.DD HH24:MI:SS')
                AND (locations <> 'PUERTO RICO'
                OR locations <> 'JAPAN')
                AND CITY='LONDON'

Ce que j'ai fait

import cx_Oracle
ip = 'XX.XX.X.XXX'
port = YYYY
SID = 'DW'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)

connection = cx_Oracle.connect('BA', 'PASSWORD', dsn_tns)

df_ora = pd.read_sql('SELECT* FROM TRANSACTION WHERE DIA_DAT>=to_date('15.02.28 00:00:00',  'YY.MM.DD HH24:MI:SS') AND (locations <> 'PUERTO RICO' OR locations <> 'JAPAN') AND CITY='LONDON'', con=connection)  

Mais j'ai cette erreur

SyntaxError: invalid syntax

Qu'ai-je fait de mal?

Merci

15
Kardu

Vous devez citer correctement votre requête SQL. Si vous regardez la mise en évidence de la syntaxe dans votre question (ou un IDE), vous remarquerez que les guillemets simples ne fonctionnent pas comme prévu.

Remplacez les guillemets les plus externes par des guillemets doubles - si vous voulez tout sur une seule ligne - ou par des guillemets triples si vous le souhaitez sur plusieurs lignes:

query = """SELECT* 
           FROM TRANSACTION
           WHERE DIA_DAT >=to_date('15.02.28 00:00:00',  'YY.MM.DD HH24:MI:SS')
           AND (locations <> 'PUERTO RICO'
           OR locations <> 'JAPAN')
           AND CITY='LONDON'"""
df_ora = pd.read_sql(query, con=connection)
22
Andy