[英]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)
对于INSERT
或UPDATE
语句或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.