【问题标题】:Inserting Variables MySQL Using Python, Not Working使用 Python 插入变量 MySQL,不工作
【发布时间】:2013-05-06 13:51:27
【问题描述】:

我想将变量bobdummyVar 插入我的表logger。现在据我所知,我需要做的就是,我在下面有什么,但这根本不会在我的表格中插入任何东西。如果我对应该写入的内容进行硬编码(使用'example' 然后它将示例写入表中,因此我的插入连接和语法在这一点上是正确的)。任何帮助都将不胜感激!

conn = mysql.connector.connect(user='username', password='password!',
                              host='Host', database='database')

cursor = conn.cursor()

bob = "THIS IS AN EXAMPLE"
dummyVar = "Variable Test"

loggit = ("""
        INSERT INTO logger (logged_info, dummy)
        VALUES
            (%s, %s)
    """, (bob, dummyVar))

cursor.execute(loggit)
conn.commit()

我也试过这个:

loggit = ("""
        INSERT INTO logger (logged_info, dummy)
        VALUES
            (%(bob)s,(Hello))
    """, (bob))

和:

bob = "THIS IS AN EXAMPLE"
dummyVar = "Variable Test"

loggit = ("""
        INSERT INTO logger (logged_info, dummy)
        VALUES
            (%s, %s)
    """, (bob, dummyVar))

cursor.execute(loggit, (bob, dummyVar))
conn.commit()


cursor.execute(loggit, (bob, dummyVar))

conn.commit()

【问题讨论】:

  • 除了您的主要问题(Martijn Pieters 回答)之外,您在最后一个示例中还有另一个问题:(bob) 不是一个元素的元组,它与 @987654329 相同@。你需要写(bob,)

标签: python mysql variables python-2.7 insert


【解决方案1】:

您需要将 SQL 语句和参数作为单独的参数传递:

cursor.execute(loggit[0], loggit[1])

或使用variable argument syntax (a splat, *)

cursor.execute(*loggit)

您的版本尝试传入包含 SQL 语句和绑定参数的元组作为唯一参数,而 .execute() 函数希望只找到 SQL 语句字符串。

更常见的做法是将两者分开,也许只将 SQL 语句存储在一个变量中:

loggit = """
        INSERT INTO logger (logged_info, dummy)
        VALUES
            (%s, %s)
    """
cursor.execute(loggit, (bob, dummyVar))

【讨论】:

  • 我不应该在 """ 之后关闭括号吗?
  • @StevenByrne 在最后一个例子中,不,因为没有开头和第二个值,loggit 是一个字符串,不再是一个元组。
  • @StevenByrne:不,没有开头括号; """ 三引号字符串可以单独跨越多行。
  • 首先,谢谢你的帮助,但我还是有点困惑,我想只将 cursor.execute(loggit) 更改为 cursor.execute(loggit, (bob, dummyVar) )或者我想也改变我创建我的插入变量的方式?附言相同的语法是否适用于全局变量?
  • @StevenByrne:您不需要更改使用 SQL 参数的方式,只需更改调用 execute() 的方式,确保传入 2 个参数。
猜你喜欢
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2013-06-07
相关资源
最近更新 更多