sqlalchemy: Regression on 1.3.16 when fetching table schema for SQL Server

This issue is happening on CentOS Linux release 7.7.1908, it does not happen on a recent MacOS.

When fetching table columns (schema) from MS SQL Server using core, the following error is raised:

File "<string>", line 2, in __new__
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/util/deprecations.py", line 128, in warned
    return fn(*args, **kwargs)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/sql/schema.py", line 507, in __new__
    metadata._remove_table(name, schema)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 69, in __exit__
    exc_value, with_traceback=exc_tb,
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
    raise exception
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/sql/schema.py", line 502, in __new__
    table._init(name, metadata, *args, **kw)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/sql/schema.py", line 596, in _init
    resolve_fks=resolve_fks,
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/sql/schema.py", line 620, in _autoload
    _extend_on=_extend_on,
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1624, in run_callable
    return callable_(self, *args, **kwargs)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 467, in reflecttable
    table, include_columns, exclude_columns, resolve_fks, **opts
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/reflection.py", line 661, in reflecttable
    table_name, schema, **table.dialect_kwargs
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/reflection.py", line 388, in get_columns
    self.bind, table_name, schema, info_cache=self.info_cache, **kw
  File "<string>", line 2, in get_columns
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/reflection.py", line 52, in cache
    ret = fn(self, con, *args, **kw)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/dialects/mssql/base.py", line 2185, in wrap
    **kw
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/dialects/mssql/base.py", line 2200, in _switch_db
    return fn(*arg, **kw)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/dialects/mssql/base.py", line 2606, in get_columns
    c = connection.execute(s)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 984, in execute
    return meth(self, multiparams, params)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 293, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1103, in _execute_clauseelement
    distilled_params,
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1288, in _execute_context
    e, statement, parameters, cursor, context
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1482, in _handle_dbapi_exception
    sqlalchemy_exception, with_traceback=exc_info[2], from_=e
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
    raise exception
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1248, in _execute_context
    cursor, statement, parameters, context
  File "/opt/applications/inrem/VENV/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 590, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', '[42000] [FreeTDS][SQL Server]Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (4004) (SQLExecDirectW)')
[SQL: SELECT [INFORMATION_SCHEMA].[COLUMNS].[TABLE_SCHEMA], [INFORMATION_SCHEMA].[COLUMNS].[TABLE_NAME], [INFORMATION_SCHEMA].[COLUMNS].[COLUMN_NAME], [INFORMATION_SCHEMA].[COLUMNS].[IS_NULLABLE], [INFORMATION_SCHEMA].[COLUMNS].[DATA_TYPE], [INFORMATION_SCHEMA].[COLUMNS].[ORDINAL_POSITION], [INFORMATION_SCHEMA].[COLUMNS].[CHARACTER_MAXIMUM_LENGTH], [INFORMATION_SCHEMA].[COLUMNS].[NUMERIC_PRECISION], [INFORMATION_SCHEMA].[COLUMNS].[NUMERIC_SCALE], [INFORMATION_SCHEMA].[COLUMNS].[COLUMN_DEFAULT], [INFORMATION_SCHEMA].[COLUMNS].[COLLATION_NAME], sys.computed_columns.definition, sys.computed_columns.is_persisted 
FROM [INFORMATION_SCHEMA].[COLUMNS] LEFT OUTER JOIN sys.computed_columns ON sys.computed_columns.object_id = object_id(concat([INFORMATION_SCHEMA].[COLUMNS].[TABLE_SCHEMA], ?, [INFORMATION_SCHEMA].[COLUMNS].[TABLE_NAME])) AND [INFORMATION_SCHEMA].[COLUMNS].[COLUMN_NAME] = sys.computed_columns.name 
WHERE [INFORMATION_SCHEMA].[COLUMNS].[TABLE_NAME] = CAST(? AS NVARCHAR(max)) AND [INFORMATION_SCHEMA].[COLUMNS].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) ORDER BY [INFORMATION_SCHEMA].[COLUMNS].[ORDINAL_POSITION]]
[parameters: ('.', 'MemberRegistration', '_Core')]
(Background on this error at: http://sqlalche.me/e/f405)

Python 3.6.8

Reverting back to version 1.3.15 fixes the error.

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 1
  • Comments: 32 (25 by maintainers)

Commits related to this issue

Most upvoted comments

yep, this latest patch fixes it