]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
implement batched INSERT..VALUES () () for executemany
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 18 Jul 2022 19:08:37 +0000 (15:08 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 24 Sep 2022 15:15:32 +0000 (11:15 -0400)
commit2bcc97da424eef7db9a5d02f81d02344925415ee
tree13d4f04bc7dd40a0207f86aa2fc3a3b49e065674
parent332188e5680574368001ded52eb0a9d259ecdef5
implement batched INSERT..VALUES () () for executemany

the feature is enabled for all built in backends
when RETURNING is used,
except for Oracle that doesn't need it,  and on
psycopg2 and mssql+pyodbc it is used for all INSERT statements,
not just those that use RETURNING.

third party dialects would need to opt in to the new feature
by setting use_insertmanyvalues to True.

Also adds dialect-level guards against using returning
with executemany where we dont have an implementation to
suit it.   execute single w/ returning still defers to the
server without us checking.

Fixes: #6047
Fixes: #7907
Change-Id: I3936d3c00003f02e322f2e43fb949d0e6e568304
48 files changed:
doc/build/changelog/unreleased_20/6047.rst [new file with mode: 0644]
doc/build/changelog/whatsnew_20.rst
doc/build/core/connections.rst
doc/build/faq/performance.rst
doc/build/orm/persistence_techniques.rst
doc/build/orm/quickstart.rst
doc/build/tutorial/orm_data_manipulation.rst
doc/build/tutorial/orm_related_objects.rst
examples/performance/__init__.py
examples/performance/bulk_inserts.py
lib/sqlalchemy/dialects/mssql/base.py
lib/sqlalchemy/dialects/mssql/pyodbc.py
lib/sqlalchemy/dialects/mysql/base.py
lib/sqlalchemy/dialects/mysql/provision.py
lib/sqlalchemy/dialects/oracle/cx_oracle.py
lib/sqlalchemy/dialects/postgresql/asyncpg.py
lib/sqlalchemy/dialects/postgresql/base.py
lib/sqlalchemy/dialects/postgresql/provision.py
lib/sqlalchemy/dialects/postgresql/psycopg2.py
lib/sqlalchemy/dialects/sqlite/base.py
lib/sqlalchemy/dialects/sqlite/provision.py
lib/sqlalchemy/engine/base.py
lib/sqlalchemy/engine/create.py
lib/sqlalchemy/engine/default.py
lib/sqlalchemy/engine/interfaces.py
lib/sqlalchemy/orm/context.py
lib/sqlalchemy/orm/persistence.py
lib/sqlalchemy/orm/session.py
lib/sqlalchemy/sql/compiler.py
lib/sqlalchemy/sql/crud.py
lib/sqlalchemy/sql/dml.py
lib/sqlalchemy/sql/schema.py
lib/sqlalchemy/sql/util.py
lib/sqlalchemy/testing/provision.py
lib/sqlalchemy/testing/requirements.py
lib/sqlalchemy/testing/suite/test_dialect.py
lib/sqlalchemy/testing/suite/test_insert.py
lib/sqlalchemy/testing/suite/test_results.py
test/dialect/mssql/test_engine.py
test/dialect/postgresql/test_dialect.py
test/dialect/postgresql/test_on_conflict.py
test/engine/test_execute.py
test/engine/test_logging.py
test/orm/test_unitofwork.py
test/requirements.py
test/sql/test_insert.py
test/sql/test_insert_exec.py
test/sql/test_returning.py