Hi, sorry for interfering, but the question is still the same, but with a little bit tricky condition. Please, have a look stackoverflow <https://stackoverflow.com/questions/44333141/python-side-defaults-are-not-invoked-for-each-row-individually-when-using-a-mult> .
On Monday, January 18, 2016 at 5:34:57 PM UTC+3, Michael Bayer wrote: > > > > On 01/18/2016 02:23 AM, gbr wrote: > > |I've upgraded from a SQLA version 0.9.x to 1.0.9. Previously, I did the > > following when inserting new records: > > > > - Column('flag', Boolean, server_default=sql.expression.false()) |||I > didn't set those columns locally and didn't include them in the > > insert statement when I wanted them to be False > > |- Column('date', Date, nullable=False) I didn't set those columns as > > part of the insert when I wanted `date=None` > > - Column('number', Float, nullable=True) I assigned integer values to > > the column which were implicitly "casted" to floats > > > > This behaviour changed which is described here > > ( > http://docs.sqlalchemy.org/en/latest/changelog/migration_10.html#python-side-defaults-invoked-for-each-row-invidually-when-using-a-multivalued-insert) > > > > > > My question which (perhaps all?) of the above things I did could have > > caused the error message below (with the upgrade). Can I reinstate the > > old behaviour (is there a global SQLA parameter I could configure?) or > > some other way of making sure I fix all places where the above bullet > > points still apply? > > that error should only occur if the list of elements you're passing to > insert.values() contains inconsistent keys. As long as each dictionary > has the same keys, that error won't occur. The old behavior was a bug, > we just kept it at 1.1 in case people were relying upon the buggy > behavior of it forcing NULL for columns where a default generator should > have been used. > > If you think something else is happening, then you need to show me a > sample of data being passed to values() along with the Table metadata > that causes this error to ensure there's not some other bug. > > here's the test that illustrates what causes the error: > > def test_server_default_absent_value(self): > metadata = MetaData() > table = Table('sometable', metadata, > Column('id', Integer, primary_key=True), > Column('data', String), > Column('foo', Integer, > server_default=func.foobar())) > > values = [ > {'id': 1, 'data': 'data1', 'foo': 'plainfoo'}, > {'id': 2, 'data': 'data2'}, > {'id': 3, 'data': 'data3', 'foo': 'otherfoo'}, > ] > > assert_raises_message( > exc.CompileError, > "INSERT value for column sometable.foo is explicitly rendered > " > "as a boundparameter in the VALUES clause; a Python-side > value or " > "SQL expression is required", > table.insert().values(values).compile > ) > > > > > > > > > File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/scoping.py", > > line 150, in do return getattr(self.registry(), name)(*args, **kwargs) > > File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", > > line 1034, in execute bind, close_with_result=True).execute(clause, > > params or {}) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line > > 914, in execute return meth(self, multiparams, params) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", > > line 323, in _execute_on_connection return > > connection._execute_clauseelement(self, multiparams, params) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line > > 1003, in _execute_clauseelement inline=len(distilled_params) > 1) File > > "<string>", line 1, in <lambda> File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", > > line 494, in compile return self._compiler(dialect, bind=bind, **kw) > > File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", > > line 500, in _compiler return dialect.statement_compiler(dialect, self, > > **kw) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", > > line 392, in __init__ Compiled.__init__(self, dialect, statement, > > **kwargs) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", > > line 190, in __init__ self.string = self.process(self.statement, > > **compile_kwargs) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", > > line 213, in process return obj._compiler_dispatch(self, **kwargs) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py", > > line 81, in _compiler_dispatch return meth(self, **kw) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", > > line 1819, in visit_insert crud_params = crud._get_crud_params(self, > > insert_stmt, **kw) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/crud.py", line > > 113, in _get_crud_params values = > > _extend_values_for_multiparams(compiler, stmt, values, kw) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/crud.py", line > > 503, in _extend_values_for_multiparams for i, row in > > enumerate(stmt.parameters[1:]) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/crud.py", line > > 503, in <genexpr> for i, row in enumerate(stmt.parameters[1:]) File > > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/crud.py", line > > 336, in _process_multiparam_default_bind "a Python-side value or SQL > > expression is required" % c) CompileError: INSERT value for column > > table.number is explicitly rendered as a boundparameter in the VALUES > > clause; a Python-side value or SQL expression is required| > > > > -- > > You received this message because you are subscribed to the Google > > Groups "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send > > an email to sqlalchemy+...@googlegroups.com <javascript:> > > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. > > To post to this group, send email to sqlal...@googlegroups.com > <javascript:> > > <mailto:sqlal...@googlegroups.com <javascript:>>. > > Visit this group at https://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.