【问题标题】:How to use select statements with variables in mysql in python如何在python中的mysql中使用带有变量的select语句
【发布时间】: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)

我做错了什么?

【问题讨论】:

    标签: python mysql mysql-connector


    【解决方案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))
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多