python - 在 mysql 表中查询动态列名及其在 python 中的值?

标签 python mysql

我想在 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 获取列名时,它作为“内存”出现,但找不到它,因为列名是内存。有没有办法摆脱 '' 字符?

confirmation of inputs

最佳答案

查看 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/

相关文章:

python - 删除上一行

python - 写入纺织品

python - 转换 Pandas 数据框

mysql - 如何在mysql中进行无限递归?

php - while 循环和 php-mailer

mysql - 制作数据库的本地副本

php - 如何循环执行 INSERT INTO 语句

Php PDO 事务中的多个准备语句

python - 拒绝负数作为 Python 中的异常

python - 傅立叶变换 opencv python FFT & DFT