6

I'm a beginner at python. We use this code to execute SQL commands.

cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (100, "abcdef"))

I wonder is this prepared statement or just a client side quoting?

Majid Azimi
  • 5,251
  • 13
  • 60
  • 106

3 Answers3

21

No, it does not, not for psycopg2 at least. The "Prepare" in the docs refers to a "PREPARE TRANSACTION" which is entirely different than a prepared statement.

You can emulate a prepared statement, by overriding the methods or executing extra statements, however. See: An example of psycopg2 cursor supporting prepared statements

Please see: relevant blog entry for psycopg.

More information:

http://www.postgresql.org/docs/9.2/static/sql-prepare.html
http://www.postgresql.org/docs/current/static/sql-prepare-transaction.html

Richard Gomes
  • 5,245
  • 1
  • 42
  • 46
Brian
  • 1,016
  • 11
  • 17
0

psycopg does support prepared statements starting with version 3:

https://www.psycopg.org/psycopg3/docs/advanced/prepare.html#prepared-statements

A query is prepared automatically after it is executed more than prepare_threshold times on a connection.

Mike Siomkin
  • 495
  • 4
  • 15
-8

According to the docs the execute method will "Prepare and execute a database operation (query or command).". So yes, it is a prepared statement.

SpliFF
  • 37,036
  • 16
  • 86
  • 116
  • 14
    Actually it currently does not. The "Prepare" in this documentation refers to a "PREPARE TRANSACTION" call required for two-phase commit, not a precompiled SQL statement. – Brian Apr 15 '13 at 18:16