【问题标题】:Is there a Python MySQL API that returns Prepared Statements for re-use?是否有 Python MySQL API 返回准备好的语句以供重用?
【发布时间】:2013-04-05 11:12:58
【问题描述】:

MySQLdboursql 都不允许返回的 prepared statements 被参数填充以用于连续执行。还有其他的吗?

至少对于.executemany()oursql 似乎比 MySQLdb 更熟练,因为 SQL 语句只为所有提交的值准备一次。

(Python 是否支持在 PostgreSQL 中准备和重用准备好的语句?)

【问题讨论】:

  • 更好完全是主观的。我认为 PostgreSQL 总体上更好但是 MySQL 确实擅长一些事情。
  • 去掉主观的“更好”来代替准备好的陈述支持

标签: python mysql postgresql prepared-statement


【解决方案1】:

对于您的 PostgreSQL 问题,至少截至去年 10 月,答案是没有特定于 Python 的方法来处理准备好的语句(我不是 Python 程序员,但这在各种语言中相当普遍)。然而,PostgreSQL 提供了一种 SQL 语言的方式来执行此操作,因此如果可以执行 SQL 查询,任何语言都可以使用准备好的语句。有关如何在 Python 中执行此操作的代码示例,请参阅http://initd.org/psycopg/articles/2012/10/01/prepared-statements-psycopg/

但有几个主要的警告。其中之一是在第一次运行时计划好准备好的语句,并重复使用该计划。这对于统一需要相同计划(例如,简单插入)的查询非常有用,但它会导致参数可能发生足够变化以致可能需要新计划的问题。因此,在大多数情况下,以下情况可能没问题(仍然需要注意令人讨厌的极端情况):

  1. INSERT INTO foo (bar) values ($1)
  2. SELECT * FROM foo WHERE bar= $1; 假设 bar 是主键

以下内容可能不安全:

  1. SELECT * FROM foo WHERE bar < $1
  2. SELECT * FROM foo WHERE baz = $1 其中 baz 可能有很大一部分行具有相同的值。

【讨论】:

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