为了账号安全,请及时绑定邮箱和手机立即绑定

Python支持MySQL预处理语句吗?

Python支持MySQL预处理语句吗?

料青山看我应如是 2019-08-19 15:39:28
Python支持MySQL预处理语句吗?我之前参与过一个PHP项目,其中准备好的语句使SELECT查询的速度提高了20%。我想知道它是否适用于Python?我似乎无法找到任何明确表示它做或不做的事情。
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

大多数语言提供了一种做泛型参数化语句的方法,Python也不例外。使用参数化查询时,支持准备语句的数据库将自动执行此操作。

在python中,参数化查询如下所示:

cursor.execute("SELECT FROM tablename WHERE fieldname = %s", [value])

根据您的驱动程序,参数化的具体样式可能会有所不同,您可以导入数据库模块然后执行print yourmodule.paramstyle

来自PEP-249:

paramstyle

       String constant stating the type of parameter marker
       formatting expected by the interface. Possible values are       [2]:

           'qmark'         Question mark style, 
                           e.g. '...WHERE name=?'
           'numeric'       Numeric, positional style, 
                           e.g. '...WHERE name=:1'
           'named'         Named style, 
                           e.g. '...WHERE name=:name'
           'format'        ANSI C printf format codes, 
                           e.g. '...WHERE name=%s'
           'pyformat'      Python extended format codes, 
                           e.g. '...WHERE name=%(name)s'


查看完整回答
反对 回复 2019-08-19
?
千万里不及你

TA贡献1784条经验 获得超9个赞

快速浏览一下MySQLdb包的Cursor对象的execute()方法(我想是一种与mysql集成的事实包),似乎(至少在默认情况下)它只进行字符串插值引用而不是实际的参数化查询:

if args is not None:
    query = query % db.literal(args)

如果这不是字符串插值,那么是什么?

在executemany的情况下,它实际上尝试将insert / replace作为单个语句执行,而不是在循环中执行它。这就是它,似乎没有魔法。至少不是默认行为。

编辑:哦,我刚刚意识到,模数运算符可以被覆盖,但我觉得像作弊和grepped源。mod但是,在任何地方都没有找到覆盖。


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 717 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信