iT邦幫忙

0

python+sqlite3 WHERE條件式問題請教

  • 分享至 

  • xImage

小弟剛學程式設計,想請問python+sqlite3的子句WHERE裡的欄位可以用python的變數表示嗎
cur.execute("SELECT * FROM table WHERE 欄位1=100")
的"欄位1"可以用python裡的變數值嗎?

froce iT邦大師 1 級 ‧ 2024-06-12 00:24:08 檢舉
欄位名直接用f-string拼出來就好。
https://stackoverflow.com/questions/66303807/pass-variable-value-to-column-name-sqlite3-python
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
熊熊工程師
iT邦研究生 1 級 ‧ 2024-06-12 09:17:46

是的,你可以在 Python 中使用變數來動態地構建 SQL 查詢。使用 sqlite3 模組時,可以通過格式化字符串或參數化查詢來實現這一點。參數化查詢更安全,因為它能夠防止 SQL 注入攻擊。以下是兩種方法的示例:

使用格式化字符串(不推薦)

這種方法不太安全,容易受到 SQL 注入攻擊的影響。這裡只是示例,實際上應該使用參數化查詢。

import sqlite3

# 假設有一個變數名為 column_name
column_name = "欄位1"
value = 100

conn = sqlite3.connect('example.db')
cur = conn.cursor()

# 使用格式化字符串
query = f"SELECT * FROM table WHERE {column_name}=?"
cur.execute(query, (value,))

rows = cur.fetchall()

for row in rows:
    print(row)

conn.close()

使用參數化查詢(推薦)

這種方法更安全,可以防止 SQL 注入攻擊。

import sqlite3

# 假設有一個變數名為 column_name
column_name = "欄位1"
value = 100

conn = sqlite3.connect('example.db')
cur = conn.cursor()

# 使用參數化查詢
query = "SELECT * FROM table WHERE {}=?".format(column_name)
cur.execute(query, (value,))

rows = cur.fetchall()

for row in rows:
    print(row)

conn.close()

在參數化查詢中,使用佔位符 ? 並將值作為元組傳遞給 execute 方法。這樣可以確保 SQL 查詢的安全性。

By GPT

froce iT邦大師 1 級 ‧ 2024-06-12 09:22:57 檢舉

「欄位名」沒辦法用參數化查詢做,只能先拚出字串,你沒看清楚題目,跟我昨晚一樣。

我要發表回答

立即登入回答