Python переменная в запросе SQL - PullRequest
       27

Python переменная в запросе SQL

0 голосов
/ 19 февраля 2020

Я использую Python3 и подключаюсь к Impala DB, используя пакет impala, как показано ниже:

#!/usr/bin/python3

import pandas as pd
from impala.dbapi import connect
from impala.util import as_pandas
import sys

def pull_from_dw(dw_conn, qry,qryparams):
    cur = dw_conn.cursor()
    if (qryparams is None):
        cur.execute(qry)
    else:
        cur.execute(qry,qryparams)
    custdata=as_pandas(cur)
    return custdata

x = sys.argv[1]
query_str="select * from <table_name> where <column_name> = '{}';"
print(query_str)
dw_conn = connect(host='10.xxx.xx.xx', port=21050, use_ssl=True,
    user='<username>',
    password='<password>',
    auth_mechanism='LDAP')
df =  pull_from_dw(dw_conn,query_str,x)
print(df)

Я могу заменить напрямую, указав .format (x) в запросе sql. Однако мне нужно заменить переменную в вызывающей функции df = pull_from_dw (dw_conn, query_str, x) и получить ошибку, как показано ниже. Пожалуйста, помогите:

$ / usr / bin / python3 script1.py 'ab c'

impala.error.ProgrammingError: Аргументом параметров запроса должен быть список, кортеж или объект dict

1 Ответ

0 голосов
/ 19 февраля 2020

Вы передаете строку в qryparams, пока она принимает список или словарь списка. передайте ему следующее, и это должно решить вашу проблему:

pull_from_dw(dw_conn, qry,[x])
...