gpt4 book ai didi

python - 将用户值传递给 WHERE 子句

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:07 24 4
gpt4 key购买 nike

我正在尝试使用 Python 和 PymySQL 将两个用户输入值的组合传递到 WHERE 子句中。

我现在的代码是:

sign_input = input("Please enter <, =, > for population check ")
Pop_Lim = input("Please input a number for population parameter ")

Where_Limit = sign_input +" "+ Pop_Lim

conn = psq.connect("localhost","root","root","City",cursorclass=psq.cursors.DictCursor)

query = "SELECT * FROM city Where Population %s"

with conn:
cursor = conn.cursor()
cursor.execute(query, Where_Limit)
city = cursor.fetchall()
for row in city:
print(row["ID"], row["Name"]," : ",row["CountryCode"]," : ",row["District"]," : ",row["Population"]) # insert spacers for legibility purposes

错误说我建议 Where_Limit 变量有问题。

关于如何解决这个问题,或者将符号和人口变量传递给 SQL 命令中的 Where 函数,有什么建议吗?

最佳答案

如果允许这样做,可能会带来安全风险。首先,确定在服务器上,如果这是用于网络服务器,则 sign_input< 之一, = , 和 > . 然后,您可以使用字符串连接 ( query = "SELECT * FROM city Where Population " + sign_input + " %s" ) 或一组 if/elif声明:

if sign_input == '<':
query = "SELECT * FROM city Where Population < %s"
elif sign_input == '=':
query = "SELECT * FROM city Where Population = %s"
elif sign_input == '>':
query = "SELECT * FROM city Where Population > %s"

连接更短且重复更少,但更容易确保 if/elif具有常量字符串的链是安全的。为 sign_input 使用一组不同的合法值也更容易与 if/elif链。

关于python - 将用户值传递给 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56101010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com