String/unicode distinction in bound parameters affects Postgres table reflection
Issue #881
resolved
After changes that made strings not longer accepted as bound parameter values for unicode columns, i get following errors when attempting to reflect tables with Postgres (but not with MySQL for example):
testTable2 = sqlalchemy.Table("test_table", metadata2, autoload=True)
File "c:\svn\sqlalchemy\lib\sqlalchemy\schema.py", line 109, in __call__
return type.__call__(self, name, metadata, *args, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\schema.py", line 234, in __init__
metadata._get_bind(raiseerr=True).reflecttable(self, include_columns=include_columns)
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\base.py", line 1196, in reflecttable
self.dialect.reflecttable(conn, table, include_columns)
File "c:\svn\sqlalchemy\lib\sqlalchemy\databases\postgres.py", line 435, in reflecttable
schema=table.schema)
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\base.py", line 796, in execute
return Connection.executors[c](c)(self, object, multiparams, params)
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\base.py", line 847, in execute_clauseelement
return self._execute_compiled(elem.compile(dialect=self.dialect, column_keys=keys, inline=len(params) > 1), distilled_params=params)
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\base.py", line 856, in _execute_compiled
context = self.__create_execution_context(compiled=compiled, parameters=distilled_params)
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\base.py", line 865, in __create_execution_context
return self.engine.dialect.create_execution_context(connection=self, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\databases\postgres.py", line 312, in create_execution_context
return PGExecutionContext(self, *args, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\default.py", line 175, in __init__
self.parameters = self.__convert_compiled_params(self.compiled_parameters)
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\default.py", line 243, in __convert_compiled_params
param[key.encode(encoding)](key.encode(encoding)) = processors[key](key)(compiled_params[key](key))
File "c:\svn\sqlalchemy\lib\sqlalchemy\types.py", line 324, in process
raise exceptions.InvalidRequestError("Received non-unicode bind param value %r" % value)
sqlalchemy.exceptions.InvalidRequestError: Received non-unicode bind param value 'test_table'
Comments (3)
-
repo owner -
repo owner - changed status to resolved
the postgres issue is fixed in 4cc7b51e2039eea1d8a773cf92255588bd2ad9c8 and it seems limited to that dialect, which is specifically using Unicode=True columns. we actually have some test coverage of convert_unicode=True with reflection in reflection.py.
-
repo owner - removed milestone
Removing milestone: 0.4.xx (automated comment)
- Log in to comment
yeah we'll have to get tests out for all dialects in this case that use a unicode-converting engine.