[Sqlalchemy-tickets] Issue #4231: Insert with inline=True on Oracle database raises error (zzzeek/s
Brought to you by:
zzzeek
From: Alistair W. <iss...@bi...> - 2018-04-03 22:31:10
|
New issue 4231: Insert with inline=True on Oracle database raises error https://bitbucket.org/zzzeek/sqlalchemy/issues/4231/insert-with-inline-true-on-oracle-database Alistair Watson: Hi, the code below fails to print the raw sql insert statement. When setting the insert inline to False, the code works but does not replace the id bind value (as expected). Adding **kw to the parameters of visit_sequence on line 770 of dialects/oracle/base.py appears to make it work as expected. SQLAlchemy version 1.2 ``` from sqlalchemy import create_engine, MetaData, Column, Integer,Sequence from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.dialects import oracle def dump(sql): print(str(sql.compile(dialect=oracle.dialect(), compile_kwargs={"literal_binds": True}))) engine = create_engine('oracle+cx_oracle://test_schema:Welcome1@localhost:1521/xe', strategy='mock',executor=dump) Base = declarative_base(metadata=MetaData()) class Child(Base): __tablename__ = 'child' id = Column(Integer, Sequence(name="test_sequence"), primary_key=True) data = Column(Integer) engine.execute(Child.__table__.insert(inline=True).values({'data':2})) ``` and the stacktrace: ``` Traceback (most recent call last): File "print_raw_sql_test.py", line 16, in <module> engine.execute(Child.__table__.insert(inline=True).values({'data':2})) File "print_raw_sql_test.py", line 6, in dump print(str(sql.compile(dialect=oracle.dialect(), compile_kwargs={"literal_binds": True}))) File "<string>", line 1, in <lambda> File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 442, in compile return self._compiler(dialect, bind=bind, **kw) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 448, in _compiler return dialect.statement_compiler(dialect, self, **kw) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/dialects/oracle/base.py", line 674, in __init__ super(OracleCompiler, self).__init__(*args, **kwargs) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/compiler.py", line 453, in __init__ Compiled.__init__(self, dialect, statement, **kwargs) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/compiler.py", line 219, in __init__ self.string = self.process(self.statement, **compile_kwargs) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/compiler.py", line 245, in process return obj._compiler_dispatch(self, **kwargs) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch return meth(self, **kw) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/compiler.py", line 2034, in visit_insert self, insert_stmt, crud.ISINSERT, **kw) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/crud.py", line 57, in _setup_crud_params return _get_crud_params(compiler, stmt, **kw) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/crud.py", line 137, in _get_crud_params _col_bind_name, check_columns, values, kw) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/crud.py", line 290, in _scan_cols values, kw) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/crud.py", line 480, in _append_param_insert_hasdefault proc = compiler.process(c.default, **kw) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/compiler.py", line 245, in process return obj._compiler_dispatch(self, **kwargs) File "/home/aw/env3/lib/python3.6/site-packages/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch return meth(self, **kw) TypeError: visit_sequence() got an unexpected keyword argument 'literal_binds' ``` |