繁体   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