簡體   English   中英

如何使用 Teradata 將參數列表傳遞給 Pandas read_sql

[英]How to pass a list of parameter to Pandas read_sql with Teradata

有沒有辦法或如何糾正我的語法,以便將字符串參數列表傳遞到 Pandas 中的 SQL 查詢中? 我有以下代碼,但它不起作用所以我有一個字符串列表,我需要將該列表參數動態傳遞到查詢中

import teradatasql
import pandas as pd 

connection = tearadatasql.connect(host="xxx",user="xxx",password="xxx")
column_list = ['A','B','C']

query = """
            select column, row
            from table1
            where column in (%s)
        """

df = pd.read_sql(query, connection, params=column_list)      

你應該用一些參數填寫 %s

df = psql.read_sql(('select "column","row" from "table1" '
                 'where "column" in %(col_list)s'), connection, params={'col_list':column_list})

你有幾個問題:

  1. 包名稱teradatasql在你的榜樣拼錯tearadatasql.connect
  2. 您必須使用與要綁定的值的數量相同數量的問號參數標記來組成 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM