apm-agent-python icon indicating copy to clipboard operation
apm-agent-python copied to clipboard

psycopg2: cursor.execute doesn't allow `vars` argument

Open MarcinWieczorek opened this issue 7 months ago • 1 comments

Describe the bug: ... psycopg2's Cursor can be invoked like this: cursor.execute(sql, vars=...) [0]. This works without instrumentation, but fails when wrapped.

To Reproduce

  1. Spin up apm and postgres
  2. execute any cursor with vars argument with instrumentation enabled (example provided)

Environment (please complete the following information)

  • OS: GNU
  • Python version: 3.13.2
  • APM Server version: 8.13.0
  • Agent version: 6.23.0

Additional context Resources: [0] https://www.psycopg.org/docs/cursor.html#cursor.execute Code example:

import psycopg2
from elasticapm.traces import capture_span
from elasticapm import instrument


def query_db():
    conn = psycopg2.connect("host=localhost dbname=test user=postgres password=postgres port=15432")
    with conn.cursor() as cur:
        cur = conn.cursor()
        cur.execute("SELECT now()", vars=[1])
        print(cur.fetchone())
    conn.close()

if __name__ == "__main__":
    query_db()
    instrument()
    query_db()

Output

(datetime.datetime(2025, 4, 23, 13, 0, 56, 460818, tzinfo=datetime.timezone.utc),)
Traceback (most recent call last):
  File "/home/marcin/git/elasticapm-psycopg2-bug/hello.py", line 17, in <module>
    query_db()
    ~~~~~~~~^^
  File "/home/marcin/git/elasticapm-psycopg2-bug/hello.py", line 10, in query_db
    cur.execute("SELECT now()", vars=[1])
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: CursorProxy.execute() got an unexpected keyword argument 'vars'

MarcinWieczorek avatar Apr 23 '25 13:04 MarcinWieczorek

Thanks for reporting and providing a reproducer.

xrmx avatar Apr 28 '25 15:04 xrmx