我想在 mysql 表中搜索指定列具有特定值的行。例如,给定输入字符串 memory=2048
它将搜索具有 "2048"
作为 memory
列的值的行,并且它将打印它们。
这是我试过的代码,但它什么也没打印出来。
input = input()
tag = input.split("=")
desc = tag[1]
tag = tag[0]
mycursor = mydb.cursor()
sql = "(SELECT * FROM comp WHERE %s LIKE %s)"
val = (tag, desc)
mycursor.execute(sql, val)
res = mycursor.fetchall()
for x in res:
print(x)
其次,我尝试了这段代码以查看问题出在哪里:
input = input()
tag = input.split("=")
desc = tag[1]
tag = tag[0]
mycursor = mydb.cursor()
sql = "(SELECT * FROM comp WHERE memory LIKE '2048')"
mycursor.execute(sql)
res = mycursor.fetchall()
for x in res:
print(x)
它给出了所需的输出。所以我的问题是,当我试图用 %s 获取列名时,它作为“内存”出现,但找不到它,因为列名是内存。有没有办法摆脱 '' 字符?
最佳答案
查看 mysql.connector's execute()
documentation它似乎使用 %s
作为绑定(bind)参数的占位符。
因此您的 execute("SELECT * FROM comp WHERE %s LIKE %s", ("memory", "2048"))
调用最终像以下 SQL 一样运行:
SELECT * FROM comp WHERE 'memory' LIKE '2048'
显然返回 0 行。
在调用 execute()
之前,您需要将文字列名称放入查询文本中:
sql = "SELECT * FROM comp WHERE %s LIKE %s" % (tag, "%s")
# => "SELECT * FROM comp WHERE memory LIKE %s"
mycursor.execute(sql, (desc, ))
关于python - 在 mysql 表中查询动态列名及其在 python 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57478244/