你有几个问题:
- 在您的示例
tearadatasql.connect 中,包名称teradatasql 拼写错误
- 您必须使用与要绑定的值的数量相同数量的问号参数标记组成 IN 谓词。
在您的示例中,您打算绑定 column_list 变量中包含的三个值,因此您必须使用三个问号参数标记组成 IN 谓词。
一般来说,您应该使用问号参数标记的数量等于您将绑定的参数值列表中值的数量来动态组合 IN 谓词。
以下是修正这两个问题的示例的修改版本。我实际上运行了这个示例并验证了它是否有效。
import teradatasql
import pandas as pd
with teradatasql.connect(host="whomooz",user="guest",password="please") as connection:
with connection.cursor() as cur:
cur.execute("create volatile table table1 (c1 varchar(1), c2 integer) on commit preserve rows")
cur.execute("insert into table1 values ('A', 1) ; insert into table1 values ('B', 2)")
column_list = ['A','B','C']
query = "select c1, c2 from table1 where c1 in ({}) order by c1".format(','.join(['?'] * len(column_list)))
print(query)
print("with params={}".format (column_list))
df = pd.read_sql(query, connection, params=column_list)
print(df)
此示例产生以下输出:
select c1, c2 from table1 where c1 in (?,?,?) order by c1
with params=['A', 'B', 'C']
c1 c2
0 A 1
1 B 2