搜尋

首頁  >  問答  >  主體

Python中如何在SQL語句中使用變數?

<p>我有以下的Python程式碼:</p> <pre class="brush:py;toolbar:false;">cursor.execute("INSERT INTO table VALUES var1, var2, var3,") </pre> <p>其中<code>var1</code>是整數,<code>var2</code>和<code>var3</code>是字串。 </p> <p>我該如何在Python中寫變數名稱而不讓它們被包含在查詢文字中? </p>
P粉200138510P粉200138510540 天前584

全部回覆(2)我來回復

  • P粉545682500

    P粉5456825002023-08-21 13:22:44

    Python DB-API的不同實作允許使用不同的佔位符,所以你需要找出你正在使用的是哪個 -- 例如(使用MySQLdb):

    cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", (var1, var2, var3))

    或(使用Python標準函式庫中的sqlite3):

    cursor.execute("INSERT INTO table VALUES (?, ?, ?)", (var1, var2, var3))

    或其他的(在VALUES之後你可以有(:1, :2, :3),或"命名樣式"(:fee, :fie , :fo)(%(fee)s, %(fie)s, %(fo)s),在execute的第二個參數中傳遞一個字典而不是一個映射)。檢查你正在使用的DB API模組中的paramstyle字串常數,並在http://www.python.org/dev/peps/pep-0249/上尋找paramstyle ,以了解所有的參數傳遞樣式!

    回覆
    0
  • P粉926174288

    P粉9261742882023-08-21 10:38:41

    cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", (var1, var2, var3))

    請注意參數被傳遞為一個元組,(a, b, c)。如果你只傳遞一個參數,元組需要以逗號結尾,(a,)

    資料庫API會對變數進行適當的轉義和引用。請注意不要使用字串格式化運算子(%),因為

    1. 它不會進行任何轉義或引用。
    2. 它容易受到無法控制的字串格式攻擊,例如SQL注入

    回覆
    0
  • 取消回覆