【问题标题】:mysql.connector update statement using dataframemysql.connector 使用数据框更新语句
【发布时间】:2020-07-03 09:51:53
【问题描述】:

我正在尝试使用数据框 id 列(与数据库表中的 id 相同)和另一列的相应值(例如“文本”)来更新 mysql 表,但我无法通过准备好的声明正确的列(我尝试了不同的方法,但它只是向我发出警告)。 任何人都知道如何解决这个问题?我相信这很容易。

我打开了一个连接,要插入的查询是

query = """ UPDATE user
                SET extra = ?
                WHERE id = ? """

虽然数据框是这样的:

data= pd.DataFrame({'id': [1, 2,3], 'text': ["yes", "no", "maybe"]})

但是我无法在执行语句中传递查询和数据

cursor.execute(query, data)

传递列的正确方法是什么?

谢谢

【问题讨论】:

    标签: python mysql pandas connection


    【解决方案1】:

    我认为您不能将 pandas 数据框作为“数据”直接传递给查询占位符。我建议使用 for 循环来完成这项工作。

    data = {'id': [1, 2,3], 'text': ["yes", "no", "maybe"]}
    
    query = """
      UPDATE user
      SET extra = '{}'
      WHERE id = {}
    """
    
    for i in range(3):
      cursor.execute(query.format(data['text'][i], data['id'][i]))
    

    已编辑:

    因为我不知道您的 Python 版本。这是另一种形式的解决方案,您可以尝试一下。

    data = {'id': [1, 2,3], 'text': ["yes", "no", "maybe"]}
    
    query = """
      UPDATE user
      SET extra = %s
      WHERE id = %s
    """
    
    for i in range(3):
      cursor.execute(query, (data['text'][i], data['id'][i]))
    

    【讨论】:

    • 我知道我的解决方案可能不是完美的,但我正在努力帮助这里的人们。如果您认为我的解决方案不起作用或有任何问题,您能否评论我的答案以改进它?我不认为没有任何 cmets 的 downvote 在这里很有礼貌。
    • 我不是投反对票的人。无论如何,该解决方案不起作用:根据 mysql.connector 库信息,我的方法更接近可能的正确方法。但是,正如您所写,重点是将 pandas 数据帧传递给执行命令。
    • @ALEX,感谢您的反馈。我不认为 mysql.connector 可以直接使用 Pandas DataFrame。您可以使用我最喜欢的sqlalchemymysql.connector 有点低级了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2020-06-04
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多