【问题标题】:How to display an SQL string that has been constructed by MySQLDB cursor?如何显示由 MySQLDB 游标构造的 SQL 字符串?
【发布时间】:2011-12-11 16:40:12
【问题描述】:

我想亲自验证一下这个 MySQL 字符串是如何被光标翻译的:

cursor.execute("SELECT * from elements where id = %s", (element_id))

有没有办法获取计算出的 SQL 字符串并将其打印出来,最好是在执行之前? (后者不是绝对必要的——我这样做只是因为我正在学习 Python 并希望确保我的 SQL 字符串正在被清理)

【问题讨论】:

    标签: python mysql-python


    【解决方案1】:

    是的。正如费迪南德指出的那样,有一个MySQLdb/cursors.py 包含一个execute(),而后者又调用_query()

    这会将执行的查询放入self._executed

    所以你可以从cursor._executed得到它。

    【讨论】:

    • 完美,谢谢!根据 Ferdinand 的回答,还没有开始深入研究 python 函数,但很高兴知道去哪里看。
    • 但是,你给 _query 什么论据?除了self之外,它只需要一个。
    • @MadsSkjern _query 获取要执行的查询,与_executed 相同。但是您不应该自己调用它。这里的重点是_execute
    【解决方案2】:

    MySQL-Python 没有什么特别之处,它只是对每个参数进行编码以防止 SQL 注入,并使用标准 Python % 运算符将 %s 占位符替换为编码参数。

    如果您真的想查看结果,请运行与cursor.execute() 相同的代码:

    from MySQLdb.converters import get_codec
    
    def prepare_sql(cursor, query, args=None):
        if args is not None:
            query = query % tuple(( get_codec(a, cursor.encoders)(db, a) for a in args ))
        return query
    

    参见MySQLdb/cursors.py 中从第168 行开始的execute() 的定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 2016-08-02
      • 2021-08-19
      • 1970-01-01
      相关资源
      最近更新 更多