summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-12-28 21:48:12 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-12-28 21:48:12 +0000
commitbd23baf4ac0f9dd520120445594bd00f1b760f4b (patch)
treeda34169da4c61043615220b456e21885eed0c16f /lib/sqlalchemy/sql
parent8669eda82dcc84b726ab420106dfea86fc8a066f (diff)
downloadsqlalchemy-bd23baf4ac0f9dd520120445594bd00f1b760f4b.tar.gz
- Can pass mapped attributes and column objects as keys
to query.update({}). [ticket:1262] - Mapped attributes passed to the values() of an expression level insert() or update() will use the keys of the mapped columns, not that of the mapped attribute.
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/compiler.py4
-rw-r--r--lib/sqlalchemy/sql/expression.py11
2 files changed, 9 insertions, 6 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 5b62e1db6..31fc9ae1e 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -653,12 +653,12 @@ class DefaultCompiler(engine.Compiled):
if self.column_keys is None:
parameters = {}
else:
- parameters = dict((getattr(key, 'key', key), None)
+ parameters = dict((sql._column_as_key(key), None)
for key in self.column_keys)
if stmt.parameters is not None:
for k, v in stmt.parameters.iteritems():
- parameters.setdefault(getattr(k, 'key', k), v)
+ parameters.setdefault(sql._column_as_key(k), v)
# create a list of column assignment clauses as tuples
values = []
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py
index b7d4965dd..07df207dd 100644
--- a/lib/sqlalchemy/sql/expression.py
+++ b/lib/sqlalchemy/sql/expression.py
@@ -901,6 +901,13 @@ def _labeled(element):
else:
return element
+def _column_as_key(element):
+ if isinstance(element, basestring):
+ return element
+ if hasattr(element, '__clause_element__'):
+ element = element.__clause_element__()
+ return element.key
+
def _literal_as_text(element):
if hasattr(element, '__clause_element__'):
return element.__clause_element__()
@@ -3496,10 +3503,6 @@ class _UpdateBase(ClauseElement):
return s
def _process_colparams(self, parameters):
-
- if parameters is None:
- return None
-
if isinstance(parameters, (list, tuple)):
pp = {}
for i, c in enumerate(self.table.c):