summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/postgresql/dml.py
diff options
context:
space:
mode:
authorGord Thompson <gord@gordthompson.com>2021-02-13 14:43:21 -0700
committerGord Thompson <gord@gordthompson.com>2021-02-15 11:16:38 -0700
commit857adaaf867df54d4a023cf19f618fdf1d0f60c9 (patch)
tree6079150053100063a2b865c7b2c9702dbcab7e3a /lib/sqlalchemy/dialects/postgresql/dml.py
parentd642946939416ea2870cf6c6479dcddad795b622 (diff)
downloadsqlalchemy-857adaaf867df54d4a023cf19f618fdf1d0f60c9.tar.gz
Accept ColumnCollection in update_on_conflict(set_=
Fixes: #5939 Change-Id: I21d7125765028e2a98d5ef4c32d8e7e457aa2d12
Diffstat (limited to 'lib/sqlalchemy/dialects/postgresql/dml.py')
-rw-r--r--lib/sqlalchemy/dialects/postgresql/dml.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/dml.py b/lib/sqlalchemy/dialects/postgresql/dml.py
index bff61e173..b6f5cdf7e 100644
--- a/lib/sqlalchemy/dialects/postgresql/dml.py
+++ b/lib/sqlalchemy/dialects/postgresql/dml.py
@@ -12,6 +12,7 @@ from ...sql import roles
from ...sql import schema
from ...sql.base import _exclusive_against
from ...sql.base import _generative
+from ...sql.base import ColumnCollection
from ...sql.dml import Insert as StandardInsert
from ...sql.elements import ClauseElement
from ...sql.expression import alias
@@ -243,8 +244,17 @@ class OnConflictDoUpdate(OnConflictClause):
"but not both, must be specified unless DO NOTHING"
)
- if not isinstance(set_, dict) or not set_:
- raise ValueError("set parameter must be a non-empty dictionary")
+ if isinstance(set_, dict):
+ if not set_:
+ raise ValueError("set parameter dictionary must not be empty")
+ elif isinstance(set_, ColumnCollection):
+ set_ = dict(set_)
+ else:
+ raise ValueError(
+ "set parameter must be a non-empty dictionary "
+ "or a ColumnCollection such as the `.c.` collection "
+ "of a Table object"
+ )
self.update_values_to_set = [
(coercions.expect(roles.DMLColumnRole, key), value)
for key, value in set_.items()