Python Mariadb 连接器模块是否能够使用准备好的语句?

问题描述 投票:0回答:1

我对此感到困惑。我所说的“准备好的语句”是指通过类似

传递的对象
prep_stmt = cursor.prepared_statement("INSERT INTO my_table (field1, field2) VALUES (%1 %2)")

...然后多次使用该对象,插入值并通过类似

执行
prep_stmt.set("mike", "rodent")
prep_stmt.execute()

或者也许

prep_stmt.set(1, "mike")
prep_stmt.set(2, "rodent")
cursor.execute(prep_stmt)

在 MariaDB 手册的本页上,我看到了 MariaDB 的 SQL 语言中存在的很多证据。

但是,无论我在哪里看到解释 MariaDB Python 模块的地方,都说这是“准备好的语句”所理解的那种语句:

cursor.execute( "SELECT * FROM sales WHERE sale_date >= ? and price > ?", (sale_date_val, price_val)) 

可以在here找到 2014 年的示例,其中上下文不是 MariaDB,而是 mysqldb。纽托弗在评论中表示,这不是一个真正准备好的声明,但亚历克斯·马泰利随后表示,它确实是,然后承认这可能不是。在最后的评论中,Olaf Dietsche 表示他已经检查了源代码,发现除了字符串格式化之外,没有任何内容涉及。

我想 MariaDB 的 Python 模块中的任何字符串格式化机制可能比正常情况更复杂一些,因为某些字符(例如空格)很难插入“?”中。在伪准备语句中。

但是,我只是想知道,在使用 Python 编码时,实际上是否有一种方法可以使用真正的准备好的语句,正如我所说,它显然存在于 MariaDB SQL 中......

python mariadb prepared-statement
1个回答
0
投票

准备好的语句可以是服务器端或客户端。 两者在代码中的使用方式相同,调用准备方法,然后设置绑定参数并执行。 在客户端中,客户端库插入绑定参数值,进行任何需要的引用,然后执行简单的语句。 在服务器端,插值由服务器完成。

我相信大多数客户端库都使用客户端准备好的语句; perl 库 或许还有其他一些库允许您选择。

通常您并不关心正在使用哪个。

PREPARE 语句是不同的东西,用于动态 sql,其中您的 sql 代码本身需要组装 sql 语句,而不是从客户端接收它

© www.soinside.com 2019 - 2024. All rights reserved.