2015-04-16 75 views
1

我有一個列表,其中包含我想從數據庫中的表中檢索的列的名稱。 我的問題是如何讓光標選擇列表中指定的列。在將它包含在select語句中之前,是否必須將nameList轉換爲字符串變量?由於在Python中使用SQLite3選擇多列

nameList = ['A','B','C','D',...] 

with sqlite3.connect(db_fileName) as conn: 
     cursor = conn.cursor() 
     cursor.execute(""" 
     select * from table 
     """) 

回答

1
nameList = ["'A(pct)'",'B','C','D',...] 

with sqlite3.connect(db_fileName) as conn: 
     cursor = conn.cursor() 
     cursor.execute(""" 
     select {} from table 
     """.format(", ".join(nameList))) 
+0

如果nameList包含像這樣的列名稱'A(pct)','B(pct)',該怎麼辦?這會打亂你的代碼,因爲Python認爲你可能會用參數pct調用某個函數。謝謝 – Jin

+0

Python不認爲你正在調用一個函數,它只是將字符串作爲字符串處理。但是SQL可能會認爲'A(pct)'是一個SQL函數..所以你可能需要在這些列名稱周圍加上單引號。請參閱:http://stackoverflow.com/a/25210041/4774955 –

+0

在SQL中,單引號用於字符串,雙引號用於表/列名稱。 –

2

只要你能確定你輸入消毒 - 避免SQL injection攻擊 - 你可以這樣做:

... 
    qry = "select {} from table;" 
    qry.format(','.join(nameList)) 
    cursor.execute(qry) 

如果你是一個真正的老版本的Python做而不是:

... 
    qry = "select %s from table;" 
    qry % ','.join(nameList) 
    cursor.execute(qry) 
+0

針對SQL注入很好的警示。對於來自Access背景的人來說,這仍然不是第二天性。 –

+0

qry =「從表中選擇{};」 qry.format(','。join(nameList)),它似乎Python不接受,因爲字符串是不可變的,不能改變?你可以仔細檢查?錯誤消息是無法識別的令牌:「{」。謝謝 – Jin

+0

@bernie:更新的解決方案仍然存在一些問題。 Nivix的解決方案似乎正在工作 – Jin