我有一個名為“Cell_list”的訪問表,其中有一個名為“Cell_#”的鍵列。我想將表讀入資料框,但只有與 python 串列“cell_numbers”中指定的索引匹配的行。我嘗試了幾種變化:
import pyodbc
import pandas as pd
cell_numbers = [1,3,7]
cnn_str = r'Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=C:\folder\myfile.accdb;'
conn = pyodbc.connect(cnn_str)
query = ('SELECT * FROM Cell_list WHERE Cell_# in ' tuple(cell_numbers))
df = pd.read_sql(query, conn)
但無論我嘗試什么,都會出現語法錯誤。我該怎么做呢?
uj5u.com熱心網友回復:
考慮以下支持的引數化最佳實踐pandas.read_sql:
# PREPARED STATEMENT, NO DATA
query = (
'SELECT * FROM Cell_list '
'WHERE [Cell_#] IN (?, ?, ?)'
)
# RUN SQL WITH BINDED PARAMS
df = pd.read_sql(query, conn, params=cell_numbers)
考慮甚至取決于長度的動態 qmark 占位符cell_numbers:
qmarks = [', '.join('?' for _ in cell_numbers)]
query = (
'SELECT * FROM Cell_list '
f'WHERE [Cell_#] IN ({qmarks})'
)
uj5u.com熱心網友回復:
轉換(加入)cell_numbers為文本:
cell_text = '(1,3,7)'
并將其連接起來。
完成的 SQL 應該是這樣的(你可能需要在奇怪的欄位名稱周圍加上括號Cell_#):
SELECT * FROM Cell_list WHERE [Cell_#] IN (1,3,7)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478480.html
上一篇:在SQL“選擇”查詢中定義臨時表
下一篇:使用SQL跨多個表計算記錄的問題
