【问题标题】:MySQL UPDATE statement PythonMySQL UPDATE 语句 Python
【发布时间】:2016-02-24 00:33:09
【问题描述】:

我在使用 Python 中的 MySQL 更新语句时遇到困难我创建了一个用于执行查询的类,我的所有其他查询都可以工作,但更新我可以用一双新的眼睛。

database_handler.sql_post_query_with_args_performed_successfully("UPDATE members SET email ='test@test.ie' WHERE id= '%s'",id) 

函数 sql_post_query_with_args_performed_successfully 在执行查询时返回 true。就目前而言,此代码返回 true 但未更新表代码的字段,如下所示: def sql_post_query_with_args_performed_successfully(self, query, args): 使用 UseDatabase(self.MYSQL_DETAILS) 作为游标: 尝试: cursor.execute(查询,参数) 返回真 除了 mysql.connector.errors.IntegrityError: 返回错误

这个函数使用另一个类“UseDatabase”来处理查询的连接和执行,这里是代码:

import mysql.connector

class UseDatabase:
    def __init__(self, configuration:dict):
        self.config = configuration

    def __enter__(self) -> 'cursor':
        """Connect to database and create a DB cursor. 

        Return the database cursor to the context manager.
        """        
        self.conn = mysql.connector.connect(**self.config)
        self.cursor = self.conn.cursor()
        return self.cursor

    def __exit__(self, exc_type, exc_value, exc_traceback):
        self.cursor.close()
        self.conn.commit()
        self.conn.close()

【问题讨论】:

  • UPDATE members SET email ='test@test.ie' WHERE id= %s 尝试删除'
  • 可能是提交或自动提交
  • 当我删除 ' 时出现以下错误:mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax;查看与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行的“%s”附近使用的正确语法
  • @Drew 这是函数 def sql_post_query_with_args_performed_successfully(self, query, args) 的代码:使用 UseDatabase(self.MYSQL_DETAILS) 作为游标:try: cursor.execute(query, args) return True except mysql.connector.errors.IntegrityError:返回 False

标签: python mysql python-3.x


【解决方案1】:

经过更多挖掘,我意识到我的 sql 语句需要是: "UPDATE 成员 SET 已验证 = 1 WHERE id = %s"

我的函数调用要求在一个元组中传递 id,如下所示: sql_post_query_with_args_performed_successfully("UPDATE members SET email ='test@test.ie' WHERE id= %s",(id,))

【讨论】:

    【解决方案2】:

    经过反复试验,我在这里找到了答案: Python mysql.connector.errors. %s passed to SQL query with quotes

    声明是: "UPDATE members SET email='test@test.ie' WHERE id='{0}'".format(id))

    【讨论】:

    • 这不是一个正确的答案。这段代码受到 sql 注入的影响,并且恰好因为 id 是整数而起作用。正如@lad2025 提到的,您应该使用“WHERE id=%s”,连接器有责任根据其类型正确引用文字。有关示例,请参阅 mysqltutorial.org/python-mysql-updatedev.mysql.com/doc/connector-python/en/…
    • @newtover 为延迟道歉,在阅读您的评论并弄清楚后,我一直在努力解决这个问题,我的数据库查询执行器函数正在寻找一个带有 id 的元组,正如您从我的回答中看到的那样
    • 我很高兴,您设法找到了解决方案。编辑旧的错误答案比添加新答案要好。如果新答案是正确的,那么对旧答案投反对票的人可以收回他们的缺点。
    • 谢谢 我现在就这样做
    猜你喜欢
    • 2023-03-31
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2021-03-29
    • 1970-01-01
    相关资源
    最近更新 更多