如何在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 数据库中获取特定行?
MySQL中SELECT * FROM [变量] 如何实现?