[Sqlalchemy-tickets] Issue #3069: multi-valued insert isn't checking additonal values for literal (
Brought to you by:
zzzeek
|
From: Mike B. <iss...@bi...> - 2014-06-04 03:05:26
|
New issue 3069: multi-valued insert isn't checking additonal values for literal https://bitbucket.org/zzzeek/sqlalchemy/issue/3069/multi-valued-insert-isnt-checking Mike Bayer: ``` #!python from sqlalchemy import create_engine, MetaData, Table, Integer, Date, Column import sqlalchemy.sql as sql md = MetaData() table = Table("data", md) table.append_column(Column("id", Integer)) table.append_column(Column("adate", Date)) table.append_column(Column("value", Integer)) data = [ {"id": 1, "value": "foo", "adate": sql.func.now()}, {"id": 2, "value": "bar", "adate": sql.func.now()} ] stmt = table.insert().values(data) print stmt ``` patch: ``` #!diff index cd01ea5..dff4c99 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -2207,10 +2207,12 @@ class SQLCompiler(Compiled): [ ( c, - self._create_crud_bind_param( + (self._create_crud_bind_param( c, row[c.key], name="%s_%d" % (c.key, i + 1) - ) + ) if elements._is_literal(row[c.key]) + else self.process( + row[c.key].self_group(), **kw)) if c.key in row else param ) for (c, param) in values_0 ``` |