2016-01-17 54 views
-1

我正在學習使用Python進行數據庫和數據庫管理,並且隨着一行代碼從Python解釋器填充數據庫中的多列,我越來越瘋狂。 正如你可以在這裏看到 https://docs.python.org/2/library/sqlite3.html[sqlite3和python]:如何填充表上的多列

,當你想從Python解釋器拍攝,你必須使用命令的代碼行(比如字符串列)填寫表格的列是

c.execute('''INSERT INTO 
tableName 
(columnName) VALUES('%s') 
''' % pythonVariable) 

如何使用some命令填充多列?我在許多方面,如

c.execute('''INSERT INTO 
tableName 
(columnName1, columnName2) VALUES('%s', '%s') 
''' % pythonVariable1 pythonVariable2) 

或只是寫了一些命令行兩次試圖這裏

c.execute('''INSERT INTO 
tableName 
(columnName1) VALUES('%s') 
''' % pythonVariable1) 

c.execute('''INSERT INTO 
tableName 
(columnName2) VALUES('%s') 
''' % pythonVariable2) 

的報道,但我沒有與他們兩個,我越來越瘋狂了這麼愚蠢的問題,你能告訴我正確的代碼行嗎?

+0

你提交到數據庫的變化? –

回答

2

我不會遵循@ Flippy的建議。

c.execute("insert into tableName values ('%s', '%s')" % (var1, var2)) 

這是不使用字符串格式化來傳遞查詢參數到查詢一個好主意 - 你變得脆弱SQL injection attack和可能遇到的類型轉換的問題。

相反,參數查詢

c.execute(""" 
    INSERT INTO 
     tableName 
    VALUES 
     (?, ?) 
""", (var1, var2)) 

conn.commit() 
+0

是的,我在之前提到過的網頁上閱讀過類似內容,但由於我對這個主題仍然不甚瞭解,實際上我看不到更多的語法變化。 你能解釋一下哪個代碼比這個代碼更脆弱嗎? –

+0

@StefanoFedele當然,請參閱查詢中的'?'佔位符和查詢後以及參數前的逗號 - 這一切都很重要,因爲我們要求'sqlite3'驅動程序創建參數化查詢 - 處理類型轉換,轉義參數以使執行安全等。請參閱https://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute。 – alecxe