【问题标题】:Python substitute variable in SQL querySQL查询中的Python替换变量
【发布时间】: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:查询参数参数应该是 列表、元组或字典对象

【问题讨论】:

  • &lt;table_name&gt; and &lt;column_name&gt; 必须填写相应的表名和列名,这是不正确的 sql 语法,还请参阅SELECT 等内容的 sql 查询语法......和同样的设置主机即凭据如何设置?
  • 是的,主机、表名和列名都正确。只是因为他们问这个问题而愚弄他们

标签: python sql variables substitution


【解决方案1】:

当它需要一个列表元组或字典时,您正在将一个字符串传递给 qryparams。传递以下内容,它应该可以解决您的问题:

pull_from_dw(dw_conn, qry,[x])

【讨论】:

  • 嗨,我改成 pull_from_dw(dw_conn, qry,[x]) 并执行如下: $ /usr/bin/python3 script1.py 'abc' select * from where = '{}';空 DataFrame 列:[x, y, z] 索引:[]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多