簡體   English   中英

如何在 mysql python 連接器中放置列名稱的占位符?

[英]How do I put a placeholder for a column name in mysql python connector?

所以我知道如何使用 %s 但它似乎不適用於列名。 我的目標是獲取列名(此處為卷號)並使用它來查找信息(他們參加了多少天)

roll=input("enter roll no.: ")
c1.execute("select sum(%s) from attendance", ("" + roll + "",))
a=c1.fetchall()

該表看起來像:

date       | 11b1 | 11b2 | 11b3 |......| 11b45 |
2020-12-01 | 1    |  0   |  1   |......|    1  |
2020-12-02 | 1    |  1   |  1   |......|    0  |
2020-12-03 | 0    |  1   |  1   |......|    1  |

這不起作用,似乎給了我一個隨機值,那么我該如何編寫中間代碼呢? 還有為什么原始代碼沒有給出錯誤但仍然給出一個任意的看似數字?

我會假設你的意思是columns_names ;

根據Python 3.8

通過使用f string ¹

roll = input("enter roll name.: ")
a = c1.execute(f"select sum({roll}) from attendance").fetchall()

MySQL 模式對象的名稱 - 表、列等 - 可以使用字符串格式插入,通過用反引號('`',ASCII 0x96)包圍占位符。 請參閱MySQL 標識符

如果列名包含空格,或者匹配關鍵字或保留字,使用反引號可以防止錯誤。

但是反引號不能防止 SQL 注入。 作為程序員,您有責任確保來自程序外部的任何列名(例如,來自用戶輸入)被驗證為與表中的列名匹配

colname = 'roll'
sql = f"""SELECT sum(`{colname}`) FROM attendance"""
mycursor.execute(sql)

對於INSERTUPDATE語句或WHERE子句中的值,應始終使用 DB-API 參數替換。

colname = 'roll'
colvalue = 42
sql = f"""SELECT sum(`{colname}`) FROM attendance WHERE colvalue = %s"""
mycursor.execute(sql, (colvalue,))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM