如何在python中的mysql中使用带有变量的select语句

Posted

技术标签:

【中文标题】如何在python中的mysql中使用带有变量的select语句【英文标题】:How to use select statements with variables in mysql in python 【发布时间】:2016-03-02 13:34:38 【问题描述】:

我想在 where 子句中使用带有变量的 select 语句。我已经对 How to use variables in SQL statement in Python? 和 Inserting Variables mysql Using Python, Not Working 进行了研究。我试图实施提供的解决方案,但它不起作用。错误代码

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

代码如下:

name = input("Write your name")
mycursor.execute("SELECT name FROM workers WHERE symbol=?", name)

我做错了什么?

【问题讨论】:

【参考方案1】:
mycursor.execute("SELECT name FROM workers WHERE symbol=%s"% name)  

就是这样

【讨论】:

我得到这个错误 ysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column 'symbol' in 'where Clause' 听听你的错误......它表明没有像符号这样的列。 @Rhys 完全正确,Spike 重新检查可用的列 不是它。永远不要推荐这个。 @DanielRoseman 您的解释将有助于我们更好地理解 python。【参考方案2】:

MySQL 库使用%s 作为占位符。

mycursor.execute("SELECT name FROM workers WHERE symbol=%s", name)

尽管相似,但这不是字符串替换。

【讨论】:

恐怕这会返回一个元组 谢谢,但我收到语法错误 "mysql.connector.errors.ProgrammingError: 1064 (42000): 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册在第 1 行的 '%s' 附近使用正确的语法" 这对我有用,有datetime 而不是name (string)。谢谢。【参考方案3】:

好的,Spike7 这正是理想的,

mycursor.execute("SELECT name FROM workers WHERE symbol=%s", (name,))  

mycursor.execute("SELECT name FROM workers WHERE symbol=?", (name,)) 

the first link you given 接受的答案解释一切。

【讨论】:

还是语法错误,shoudi 把符号去掉? @Spike7 您编写的查询意味着如果符号列中的值与名称变量的值匹配,则从工人表中选择所有名称 是的,这是我的错。当我查看问题时,它说符号,我认为这是某种 mysql 语言。我把它改成了名字,效果很好【参考方案4】:

你可以使用

mycursor.execute("SELECT name FROM workers WHERE symbol=".format(name))

这只有在你的变量名不是字符串时才有效

【讨论】:

以上是关于如何在python中的mysql中使用带有变量的select语句的主要内容,如果未能解决你的问题,请参考以下文章

使用带有外部变量的python将数据插入mysql

如何使用存储在变量中的值从 python mysql 数据库中获取特定行?

使用 %s 插入 Python mysql 连接器

MySQL中SELECT * FROM [变量] 如何实现?

如何将 mySQL 数据库中的结果保存到 python 中的文件或变量中?

Python3 - 字符串中的变量替换