fix parameter formatting in sqlite debug output

This commit is contained in:
Sarah Hoffmann
2023-12-05 15:23:16 +01:00
parent 1b7c8240ba
commit 05e47fbb28

View File

@@ -90,6 +90,11 @@ class BaseLogger:
params = dict(compiled.params) params = dict(compiled.params)
if isinstance(extra_params, Mapping): if isinstance(extra_params, Mapping):
for k, v in extra_params.items(): for k, v in extra_params.items():
if hasattr(v, 'to_wkt'):
params[k] = v.to_wkt()
elif isinstance(v, (int, float)):
params[k] = v
else:
params[k] = str(v) params[k] = str(v)
elif isinstance(extra_params, Sequence) and extra_params: elif isinstance(extra_params, Sequence) and extra_params:
for k in extra_params[0]: for k in extra_params[0]:
@@ -97,6 +102,7 @@ class BaseLogger:
sqlstr = str(compiled) sqlstr = str(compiled)
if conn.dialect.name == 'postgresql':
if sa.__version__.startswith('1'): if sa.__version__.startswith('1'):
try: try:
sqlstr = re.sub(r'__\[POSTCOMPILE_[^]]*\]', '%s', sqlstr) sqlstr = re.sub(r'__\[POSTCOMPILE_[^]]*\]', '%s', sqlstr)
@@ -111,6 +117,16 @@ class BaseLogger:
sqlstr = re.sub(r'__\[POSTCOMPILE_([^]]*)\]', r'%(\1)s', sqlstr) sqlstr = re.sub(r'__\[POSTCOMPILE_([^]]*)\]', r'%(\1)s', sqlstr)
return sqlstr % params return sqlstr % params
assert conn.dialect.name == 'sqlite'
# params in positional order
pparams = (repr(params.get(name, None)) for name in compiled.positiontup) # type: ignore
sqlstr = re.sub(r'__\[POSTCOMPILE_([^]]*)\]', '?', sqlstr)
sqlstr = re.sub(r"\?", lambda m: next(pparams), sqlstr)
return sqlstr
class HTMLLogger(BaseLogger): class HTMLLogger(BaseLogger):
""" Logger that formats messages in HTML. """ Logger that formats messages in HTML.
""" """