Changeset 878 for trunk/pg.py


Ignore:
Timestamp:
Jul 21, 2016, 12:57:25 PM (3 years ago)
Author:
cito
Message:

Allow extra keys in params to query_formatted()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/pg.py

    r876 r878  
    620620                    for value in values:
    621621                        append(add(value))
    622             command = command % tuple(literals)
     622            command %= tuple(literals)
    623623        elif isinstance(values, dict):
     624            # we want to allow extra keys in the dictionary,
     625            # so we first must find the values actually used in the command
     626            used_values = {}
     627            literals = dict.fromkeys(values, '')
     628            for key in literals:
     629                del literals[key]
     630                try:
     631                    command % literals
     632                except KeyError:
     633                    used_values[key] = values[key]
     634                literals[key] = ''
     635            values = used_values
    624636            if inline:
    625637                adapt = self.adapt_inline
     
    630642                literals = {}
    631643                if types:
    632                     if (not isinstance(types, dict) or
    633                             len(types) < len(values)):
     644                    if not isinstance(types, dict):
    634645                        raise TypeError('The values and types do not match')
    635646                    for key in sorted(values):
    636                         literals[key] = add(values[key], types[key])
     647                        literals[key] = add(values[key], types.get(key))
    637648                else:
    638649                    for key in sorted(values):
    639650                        literals[key] = add(values[key])
    640             command = command % literals
     651            command %= literals
    641652        else:
    642653            raise TypeError('The values must be passed as tuple, list or dict')
Note: See TracChangeset for help on using the changeset viewer.