簡體   English   中英

Pandas read_sql with where 子句使用“in”

[英]Pandas read_sql with where clause using "in"

幫助!

我需要使用“in”子句查詢一個表,其中的 SQL 如下所示:

select * from some_table where some_field in (?)

我最初采取了一種天真的方法並嘗試了這個:

in_items = [1,2,3,4]
df = pd.read_sql(MY_SQL_STATEMENT, con=con, params=[in_items]

哪個不起作用,它會引發以下錯誤:

The SQL contains 1 parameter markers, but 4 parameters were supplied

我遇到的問題是弄清楚如何將項目列表作為單個參數傳遞。

我可以使用字符串連接方法,例如:

MY_SQL = 'select * from tableA where fieldA in ({})'.format(
  ','.join([str(x) from x in list_items]))
df = pd.read_sql(MY_SQL, con=con)

如果可能,我寧願避免這種方法。 有人知道將值列表作為單個參數傳遞的方法嗎?

我也願意接受一種可能更聰明的方法來做到這一點。 :)

簡單地對占位符進行字符串格式化,然后將您的參數傳入pandas.read_sql 請注意,占位符標記取決於 DB-API: pyodbc / sqlite3使用 qmarks ? 大多數其他人使用%s 下面假設前一個標記:

in_items = [1,2,3,4]
MY_SQL = 'select * from tableA where fieldA in ({})'\
           .format(', '.join(['?' for _ in in_items]))
# select * from tableA where fieldA in (?, ?, ?, ?)

df = pd.read_sql(MY_SQL, con=con, params=[in_items])

對我來說,使用 sqllite3,是這樣工作的:

list_of_entries_to_retrive = pd.read_excel('.table_with_entries.xlsx')
list_of_entries_to_retrive = (cell_list['entries']).tolist()

conn = sqlite3.connect('DataBase.db')

queryString = 'SELECT * FROM table WHERE attribute IN (\'{}\');'.format('\',\''.join([_ for _ in list_of_entries_to_retrive]))
df = pd.read_sql(queryString, con=conn)

不要這樣工作:

df = pd.read_sql(queryString, con=conn,  params=[list_of_entries_to_retrive]))

謝謝

暫無
暫無

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

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