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.

Reply via email to