Hi Mike,
When using Core, we can do a bulk insert and bulk return with Postgresql
trivially:
from sqlalchemy import table, column
t = table('foo', column('id'), column('bar')
ins = t.insert().values([{'bar': 'a'}, {'bar': 'b'}]).returning(foo.id)
results = conn.execute(ins)
ids = results.fetchall()
However, with raw textual SQL, it is a bit more inconvenient.
The following doesn't work:
results = conn.execute(text(
'insert into foo values (:bar) returning id
), [{'bar': 'a'}, {'bar': 'b'}])
# raises sqlalchemy.exc.ResourceClosedError: This result object does
not return rows. It has been closed automatically.
results.fetchall()
To get it working, we have to do it this way:
results = conn.execute(text(
'insert into foo values (:bar0), (:bar1)
), {'bar0': 'x', 'bar1': 'y'})
assert results.fetchall()
This isn't convenient. For example you would have to convert a list of bars
like [{'bar': 'a'}, {'bar': 'b'}] into a single dict with uniquely name
keys {'bar0': 'a', 'bar1': 'b'}.
I imagine sqlalchemy is doing that under the hood when using core. Is there
some convenience function available in sqlalchemy core that I can use to
simplify this?
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/ee82dcc7-7ff5-43e6-a405-1e5aedaaaeban%40googlegroups.com.