2017-09-06 7 views
1

J'essaie de récupérer des données de sqlite3 à l'aide de variables. Il fonctionne très bien avec la déclaration execute() mais je voudrais récupérer les colonnes aussi à cette fin, j'utilise read_sql_query() mais je ne peux pas passer des variables dans read_sql_query(), s'il vous plaît suivre ci-dessous le code:comment insérer des variables dans read_sql_query en utilisant python

def cal(): 
    tab = ['LCOLOutput'] 
    column_name = 'CUSTOMER_EMAIL_ID' 
    xyz = '**[email protected]' 
    for index, m in enumerate(tab): 
     table_name = m 
     sq = "SELECT * FROM ? where ?=?;" , (table_name, column_name, xyz,) 
     df = pandas.read_sql_query(sq,conn) 
     writer = 
     pandas.ExcelWriter('D:\pandas_simple.xlsx',engine='xlsxwriter') 
     df.to_excel(writer, sheet_name='Sheet1') 
     writer.save() 
+0

Je suis confronté à cette erreur-SyntaxError: caractère non-ASCII '\ xc2' dans le fichier D: /Automation/TicketAuditDefects/exp.py sur la ligne 90, mais aucun codage déclaré; voir http://python.org/dev/peps/pep-0263/ pour les détails –

+0

Salut, je suis toujours confronté à cette erreur - "pandas.io.sql.DatabaseError: L'exécution a échoué sur SQL 'SELECT * FROM? Où? =? ': near "?": erreur de syntaxe " –

Répondre

2

Vous devez changer la syntaxe avec la méthode read_sql_query() de pandas, vérifiez le doc.

Pour SQLite, il devrait fonctionner avec:

sq = "SELECT * FROM ? where ?=?;" 
param = (table_name, column_name, xyz,) 
df = pandas.read_sql_query(sq,conn, params=param) 

EDIT: sinon essayez avec ce qui suit le formatage de la table:

sq = "SELECT * FROM {} where ?=?;".format(table_name) 
param = (column_name, xyz,) 
df = pandas.read_sql_query(sq,conn, params=param) 

Cocher cette answer expliquant pourquoi le tableau ne peut pas être passé en paramètre directement.

+0

Salut PRMoureu, je suis confronté à cette erreur" pandas.io.sql.DatabaseError: L'exécution a échoué sur sql' SELECT * FROM? où? =? ': près de "?": erreur de syntaxe " –

+0

pouvez-vous vérifier la réponse éditée? – PRMoureu

+0

Salut PRMoureu, Cela fonctionne très bien- "sq =" SELECT * FROM {} où {} = ?; ". Format (nom_table, nom_colonne) param = (xyz,) df = pandas.read_sql_query (sq, conn, params = param) " –