【发布时间】:2020-02-19 01:25:31
【问题描述】:
我正在使用 Python3 并使用 impala 包连接到 Impala DB,如下所示:
#!/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)
我可以通过在 sql 查询中指定 .format(x) 来直接替换。但是,我需要在调用函数 df = pull_from_dw(dw_conn,query_str,x) 中进行变量替换并得到如下错误。请帮忙:
$ /usr/bin/python3 script1.py 'abc'
impala.error.ProgrammingError:查询参数参数应该是 列表、元组或字典对象
【问题讨论】:
-
<table_name> and <column_name>必须填写相应的表名和列名,这是不正确的 sql 语法,还请参阅SELECT等内容的 sql 查询语法......和同样的设置主机即凭据如何设置? -
是的,主机、表名和列名都正确。只是因为他们问这个问题而愚弄他们
标签: python sql variables substitution