summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/unreleased_14/mr_str.rst7
-rw-r--r--lib/sqlalchemy/engine/default.py1
-rw-r--r--test/sql/test_compiler.py11
3 files changed, 19 insertions, 0 deletions
diff --git a/doc/build/changelog/unreleased_14/mr_str.rst b/doc/build/changelog/unreleased_14/mr_str.rst
new file mode 100644
index 000000000..f8511dc87
--- /dev/null
+++ b/doc/build/changelog/unreleased_14/mr_str.rst
@@ -0,0 +1,7 @@
+.. change::
+ :tags: bug, sql
+
+ Fixed the "stringify" compiler to support a basic stringification
+ of a "multirow" INSERT statement, i.e. one with multiple tuples
+ following the VALUES keyword.
+
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py
index 5193a0273..0242d9812 100644
--- a/lib/sqlalchemy/engine/default.py
+++ b/lib/sqlalchemy/engine/default.py
@@ -790,6 +790,7 @@ class StrCompileDialect(DefaultDialect):
supports_native_boolean = True
+ supports_multivalues_insert = True
supports_simple_order_by_label = True
colspecs = {
diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py
index d7a74ee2e..6cadda0bb 100644
--- a/test/sql/test_compiler.py
+++ b/test/sql/test_compiler.py
@@ -4415,6 +4415,17 @@ class StringifySpecialTest(fixtures.TestBase):
stmt = Column(Integer) == 5
eq_ignore_whitespace(str(stmt), '"<name unknown>" = :param_1')
+ def test_empty_insert(self):
+ stmt = table1.insert().values()
+ eq_ignore_whitespace(str(stmt), "INSERT INTO mytable () VALUES ()")
+
+ def test_multirow_insert(self):
+ stmt = table1.insert().values([{"myid": 1}, {"myid": 2}])
+ eq_ignore_whitespace(
+ str(stmt),
+ "INSERT INTO mytable (myid) VALUES (:myid_m0), (:myid_m1)",
+ )
+
def test_cte(self):
# stringify of these was supported anyway by defaultdialect.
stmt = select(table1.c.myid).cte()