Skip to content

paramstyle not propagated to pg8000 #5291

@sandro-felicioni

Description

@sandro-felicioni

Bug description
When executing a raw sql statement using connection.execute(..) the specified paramstyle in create_engine(..) is not propagated to pg8000. In turn, the parameters cannot be resolved correctly and the sql statement fails. When I manually debug and override the cursor.paramstyle parameter to e.g. 'named' it works as expected.

To Reproduce
Execute following code reproduces the error.

engine = create_engine(f"postgresql+pg8000://{username}:{password}@{host}:{port}/{database}",  paramstyle="named")
with engine.connect() as connection:
    connection.execute("INSERT INTO mytable (user_id) VALUES (:p1)", p1="user1")

The schema I used was the following:
CREATE TABLE mytable( user_id VARCHAR(30) );

Error

Traceback (most recent call last):
  File "/Users/Sandro/projects/dummy/main.py", line 10, in <module>
    main()
  File "/Users/Sandro/projects/dummy/main.py", line 27, in main
    connection.execute("INSERT INTO mytable (user_id) VALUES (:p1)", p1="user1")
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 976, in execute
    return self._execute_text(object_, multiparams, params)
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1151, in _execute_text
    parameters,
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1288, in _execute_context
    e, statement, parameters, cursor, context
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1482, in _handle_dbapi_exception
    sqlalchemy_exception, with_traceback=exc_info[2], from_=e
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
    raise exception
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1248, in _execute_context
    cursor, statement, parameters, context
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 590, in do_execute
    cursor.execute(statement, parameters)
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/pg8000/core.py", line 865, in execute
    self._c.execute(self, operation, args)
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/pg8000/core.py", line 1849, in execute
    self.handle_messages(cursor)
  File "/Users/Sandro/anaconda3/envs/dummy/lib/python3.6/site-packages/pg8000/core.py", line 1988, in handle_messages
    raise self.error
sqlalchemy.exc.ProgrammingError: (pg8000.core.ProgrammingError) {'S': 'ERROR', 'V': 'ERROR', 'C': '42601', 'M': 'syntax error at or near ":"', 'P': '39', 'F': 'scan.l', 'L': '1128', 'R': 'scanner_yyerror'}
[SQL: INSERT INTO mytable (user_id) VALUES (:p1)]
[parameters: {'p1': 'user1'}]
(Background on this error at: http://sqlalche.me/e/f405)

Versions.

  • OS: Mac
  • Python: 3.6
  • SQLAlchemy: 1.3.16
  • Database: Postgres:10.7
  • DBAPI: pg8000:1.15.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionissue where a "fix" on the SQLAlchemy side is unlikely, hence more of a usage questionsqluse casenot really a feature or a bug; can be support for new DB features or user use cases not anticipated

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions