On Tuesday, June 3, 2014 10:52:34 PM UTC-4, Michael Bayer wrote:

> traditional multi-insert is to use executemany() syntax, I’m not sure if 
> sqlite supports values () (), anyway.
>
>
Not sure about that either. The sqlite example was just quick way how to 
reproduce something resembling the actual problem I had in Postgres.
 

> data = [
>   {"id": 1, "value": "foo"},
>   {"id": 2, "value": "bar"}
> ]
>
> stmt = table.insert().values(adate=sql.func.now())
> engine.execute(stmt, data)
>
>
Thanks, this worked.

In this case I was solving a batch/buffered INSERT for ETL of bulk data and 
tried to have it more generic. Just looks a bit "hacky" in the code, as 
there are two places where the records are populated with values: one is 
for actual data the other is for the timestamp (we are going to have few 
more in the future).


 

>
> the func.now() is a constant and the multi-values thing doesn’t support 
> different constant expressions in each bundle as it would mean lots of 
> expensive isinstance() checks, 
>
 
Understood. The costs reasons make sense.

if you just put it in the first element that will work also:
>
>  

> data = [
>   {"id": 1, "value": "foo", "adate":sql.func.now()},
>   {"id": 2, "value": "bar"}
> ]
>
> stmt = table.insert().values(data)
> print stmt
>
>
>
Thanks a lot for the help.

Stefan
 

>
>
>
>
> On Jun 3, 2014, at 5:40 PM, Stefan Urbanek <stefan....@gmail.com 
> <javascript:>> wrote:
>
> Hi,
>
> I'm trying to multi-insert records which contain a function:
>
> record = { 
>
>     "some_date": sql.func.now() 
>
>     key: value, ...
>
> } 
>
>
> When I execute table insert with list of records where len(records) > 1 
> then I get an error:
>
> “sqlalchemy.exc.ProgrammingError: (ProgrammingError) can't adapt type 
> 'now’”
>
>
> I noticed something in the string representation of the statement:
>
> INSERT INTO table (some_date, col1, col2) VALUES (now(), %(col1_0)s, 
> %(col2_0)), (%(some_date_1)s, %(col1_1)s, %(col2_1))
>
>
> Note that the first value in the second record is `%(some_date_1)s` 
> instead of `now()`
>
> What might be wrong?
>
> Stefan
>
> -- 
> 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:>.
> To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>
>
>

-- 
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to