Unfortunately I don't have access to a blank database and I took the chance and ran your tests on a non-empty database. Tests are mostly good: 5/7 pass. You should know that I used current trunk and simply commented out the line, which resets the supports_unicode_binds but it should be equivalent in effect to your patch. Without the patch all tests fail. Below is pretty verbose result for you.
I hope this helps, Victor ./sqla_nose.py -v test.sql.test_types:UnicodeTest --dburi="mssql +pyodbc://XXXX:xxx@xxx:2431/X? driver=SQLServer&port=2431&TDS_Version=8.0" --log- debug=sqlalchemy.orm.mapper --log-debug=sqlalchemy.pool --log- debug=sqlalchemy.engine DEBUG:sqlalchemy.pool.QueuePool:Created new connection <pyodbc.Connection object at 0xa3fdfa0> INFO:sqlalchemy.engine.base.Engine:SELECT user_name() as user_name; INFO:sqlalchemy.engine.base.Engine:() DEBUG:sqlalchemy.engine.base.Engine:Col ('user_name',) DEBUG:sqlalchemy.engine.base.Engine:Row (u'SPEED_IT', ) INFO:sqlalchemy.engine.base.Engine: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' INFO:sqlalchemy.engine.base.Engine:(u'SPEED_IT',) DEBUG:sqlalchemy.engine.base.Engine:Col ('default_schema_name',) DEBUG:sqlalchemy.engine.base.Engine:Row (u'dbo', ) DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_1]. [IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], [COLUMNS_1]. [ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1].[COLLATION_NAME] FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? INFO:sqlalchemy.engine.base.Engine:(u'unicode_table', u'dbo') DEBUG:sqlalchemy.engine.base.Engine:Col ('TABLE_SCHEMA', 'TABLE_NAME', 'COLUMN_NAME', 'IS_NULLABLE', 'DATA_TYPE', 'ORDINAL_POSITION', 'CHARACTER_MAXIMUM_LENGTH', 'NUMERIC_PRECISION', 'NUMERIC_SCALE', 'COLUMN_DEFAULT', 'COLLATION_NAME') INFO:sqlalchemy.engine.base.Engine: CREATE TABLE unicode_table ( id INTEGER NOT NULL IDENTITY(1,1), unicode_varchar NVARCHAR(250) NULL, unicode_text NTEXT NULL, PRIMARY KEY (id) ) INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool test.sql.test_types.UnicodeTest.test_blank_strings ... DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:INSERT INTO unicode_table (unicode_varchar) OUTPUT inserted.id VALUES (?) INFO:sqlalchemy.engine.base.Engine:(u'',) DEBUG:sqlalchemy.engine.base.Engine:Col ('id',) DEBUG:sqlalchemy.engine.base.Engine:Row (1, ) INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT unicode_table.unicode_varchar FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() DEBUG:sqlalchemy.engine.base.Engine:Col ('unicode_varchar',) DEBUG:sqlalchemy.engine.base.Engine:Row (u'', ) DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:DELETE FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool ok test.sql.test_types.UnicodeTest.test_ignoring_unicode_error ... DEBUG:sqlalchemy.pool.QueuePool:Created new connection <pyodbc.Connection object at 0xa4490e0> INFO:sqlalchemy.engine.base.Engine:SELECT user_name() as user_name; INFO:sqlalchemy.engine.base.Engine:() DEBUG:sqlalchemy.engine.base.Engine:Col ('user_name',) DEBUG:sqlalchemy.engine.base.Engine:Row (u'SPEED_IT', ) INFO:sqlalchemy.engine.base.Engine: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' INFO:sqlalchemy.engine.base.Engine:(u'SPEED_IT',) DEBUG:sqlalchemy.engine.base.Engine:Col ('default_schema_name',) DEBUG:sqlalchemy.engine.base.Engine:Row (u'dbo', ) DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_1]. [IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], [COLUMNS_1]. [ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1].[COLLATION_NAME] FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? INFO:sqlalchemy.engine.base.Engine:(u'unicode_err_table', u'dbo') DEBUG:sqlalchemy.engine.base.Engine:Col ('TABLE_SCHEMA', 'TABLE_NAME', 'COLUMN_NAME', 'IS_NULLABLE', 'DATA_TYPE', 'ORDINAL_POSITION', 'CHARACTER_MAXIMUM_LENGTH', 'NUMERIC_PRECISION', 'NUMERIC_SCALE', 'COLUMN_DEFAULT', 'COLLATION_NAME') INFO:sqlalchemy.engine.base.Engine: CREATE TABLE unicode_err_table ( sort INTEGER NULL, plain_varchar_no_coding_error VARCHAR(248) NULL ) INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool INFO:sqlalchemy.engine.base.Engine:INSERT INTO unicode_err_table (sort, plain_varchar_no_coding_error) VALUES (?, ?) INFO:sqlalchemy.engine.base.Engine:(1, 'Alors vous imaginez ma surprise, au lever du jour, quand une drle de petite voix ma rveill. Elle disait: Sil vous plat dessine-moi un mouton! ') INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT unicode_err_table.sort, unicode_err_table.plain_varchar_no_coding_error FROM unicode_err_table INFO:sqlalchemy.engine.base.Engine:() DEBUG:sqlalchemy.engine.base.Engine:Col ('sort', 'plain_varchar_no_coding_error') DEBUG:sqlalchemy.engine.base.Engine:Row (1, 'Alors vous imaginez ma surprise, au lever du jour, quand une drle de petite voix ma rveill. Elle disait: Sil vous plat dessine-moi un mouton! ') DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool INFO:sqlalchemy.engine.base.Engine:INSERT INTO unicode_err_table (sort, plain_varchar_no_coding_error) VALUES (?, ?) INFO:sqlalchemy.engine.base.Engine:(2, u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb') INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT unicode_err_table.sort, unicode_err_table.plain_varchar_no_coding_error FROM unicode_err_table ORDER BY unicode_err_table.sort INFO:sqlalchemy.engine.base.Engine:() DEBUG:sqlalchemy.engine.base.Engine:Col ('sort', 'plain_varchar_no_coding_error') DEBUG:sqlalchemy.engine.base.Engine:Row (1, 'Alors vous imaginez ma surprise, au lever du jour, quand une drle de petite voix ma rveill. Elle disait: Sil vous plat dessine-moi un mouton! ') DEBUG:sqlalchemy.engine.base.Engine:Row (2, 'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m?a r \xe9veill\xe9. Elle disait: \xab S?il vous pla\xeet? dessine-moi un mouton! ') DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_1]. [IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], [COLUMNS_1]. [ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1].[COLLATION_NAME] FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? INFO:sqlalchemy.engine.base.Engine:(u'unicode_err_table', u'dbo') DEBUG:sqlalchemy.engine.base.Engine:Col ('TABLE_SCHEMA', 'TABLE_NAME', 'COLUMN_NAME', 'IS_NULLABLE', 'DATA_TYPE', 'ORDINAL_POSITION', 'CHARACTER_MAXIMUM_LENGTH', 'NUMERIC_PRECISION', 'NUMERIC_SCALE', 'COLUMN_DEFAULT', 'COLLATION_NAME') DEBUG:sqlalchemy.engine.base.Engine:Row (u'dbo', u'unicode_err_table', u'sort', 'YES', u'int', 1, None, 10, 0, None, None) INFO:sqlalchemy.engine.base.Engine: DROP TABLE unicode_err_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool FAIL DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:DELETE FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool test.sql.test_types.UnicodeTest.test_native_unicode ... FAIL DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:DELETE FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool test.sql.test_types.UnicodeTest.test_round_trip ... DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:INSERT INTO unicode_table (unicode_varchar, unicode_text) OUTPUT inserted.id VALUES (?, ?) INFO:sqlalchemy.engine.base.Engine:(u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill \xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb', u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb') DEBUG:sqlalchemy.engine.base.Engine:Col ('id',) DEBUG:sqlalchemy.engine.base.Engine:Row (2, ) INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT unicode_table.id, unicode_table.unicode_varchar, unicode_table.unicode_text FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() DEBUG:sqlalchemy.engine.base.Engine:Col ('id', 'unicode_varchar', 'unicode_text') DEBUG:sqlalchemy.engine.base.Engine:Row (2, u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb', u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill \xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb') DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:DELETE FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool ok test.sql.test_types.UnicodeTest.test_round_trip_executemany ... DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:INSERT INTO unicode_table (unicode_varchar, unicode_text) VALUES (?, ?) INFO:sqlalchemy.engine.base.Engine:((u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb', u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill \xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb'), (u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb', u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S \u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb')) INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT unicode_table.id, unicode_table.unicode_varchar, unicode_table.unicode_text FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() DEBUG:sqlalchemy.engine.base.Engine:Col ('id', 'unicode_varchar', 'unicode_text') DEBUG:sqlalchemy.engine.base.Engine:Row (3, u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb', u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill \xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb') DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:DELETE FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool ok test.sql.test_types.UnicodeTest.test_unicode_warnings ... DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:DELETE FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool ok test.sql.test_types.UnicodeTest.test_union ... DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:INSERT INTO unicode_table (unicode_varchar, unicode_text) OUTPUT inserted.id VALUES (?, ?) INFO:sqlalchemy.engine.base.Engine:(u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill \xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb', u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb') DEBUG:sqlalchemy.engine.base.Engine:Col ('id',) DEBUG:sqlalchemy.engine.base.Engine:Row (5, ) INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT unicode_table.unicode_varchar FROM unicode_table UNION SELECT unicode_table.unicode_varchar FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() DEBUG:sqlalchemy.engine.base.Engine:Col ('unicode_varchar',) DEBUG:sqlalchemy.engine.base.Engine:Row (u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb', ) DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:DELETE FROM unicode_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool ok DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> checked out from pool INFO:sqlalchemy.engine.base.Engine:SELECT [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_1]. [IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], [COLUMNS_1]. [ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1].[COLLATION_NAME] FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? INFO:sqlalchemy.engine.base.Engine:(u'unicode_table', u'dbo') DEBUG:sqlalchemy.engine.base.Engine:Col ('TABLE_SCHEMA', 'TABLE_NAME', 'COLUMN_NAME', 'IS_NULLABLE', 'DATA_TYPE', 'ORDINAL_POSITION', 'CHARACTER_MAXIMUM_LENGTH', 'NUMERIC_PRECISION', 'NUMERIC_SCALE', 'COLUMN_DEFAULT', 'COLLATION_NAME') DEBUG:sqlalchemy.engine.base.Engine:Row (u'dbo', u'unicode_table', u'id', 'NO', u'int', 1, None, 10, 0, None, None) INFO:sqlalchemy.engine.base.Engine: DROP TABLE unicode_table INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT DEBUG:sqlalchemy.pool.QueuePool:Connection <pyodbc.Connection object at 0xa3fdfa0> being returned to pool DEBUG:sqlalchemy.pool.QueuePool:Closing connection <pyodbc.Connection object at 0xa4490e0> DEBUG:sqlalchemy.pool.QueuePool:Exception closing connection <pyodbc.Connection object at 0xa4490e0> INFO:sqlalchemy.pool.QueuePool:Pool disposed. Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0 INFO:sqlalchemy.pool.QueuePool:Pool recreating DEBUG:sqlalchemy.pool.QueuePool:Closing connection <pyodbc.Connection object at 0xa3fdfa0> DEBUG:sqlalchemy.pool.QueuePool:Exception closing connection <pyodbc.Connection object at 0xa3fdfa0> INFO:sqlalchemy.pool.QueuePool:Pool disposed. Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0 INFO:sqlalchemy.pool.QueuePool:Pool recreating INFO:sqlalchemy.pool.QueuePool:Pool disposed. Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0 INFO:sqlalchemy.pool.QueuePool:Pool recreating INFO:sqlalchemy.pool.QueuePool:Pool disposed. Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0 INFO:sqlalchemy.pool.QueuePool:Pool recreating INFO:sqlalchemy.pool.QueuePool:Pool disposed. Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0 INFO:sqlalchemy.pool.QueuePool:Pool recreating INFO:sqlalchemy.pool.QueuePool:Pool disposed. Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0 INFO:sqlalchemy.pool.QueuePool:Pool recreating INFO:sqlalchemy.pool.QueuePool:Pool disposed. Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0 INFO:sqlalchemy.pool.QueuePool:Pool recreating INFO:sqlalchemy.pool.QueuePool:Pool disposed. Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0 INFO:sqlalchemy.pool.QueuePool:Pool recreating ====================================================================== FAIL: test.sql.test_types.UnicodeTest.test_ignoring_unicode_error ---------------------------------------------------------------------- Traceback (most recent call last): File "/opt/home/vo63573/satest/lib/python2.6/site-packages/nose/ case.py", line 197, in runTest self.test(*self.arg) File "<string>", line 1, in <lambda> File "/opt/home/vo63573/satest/src/sqlalchemy/./test/lib/ testing.py", line 53, in decorate return fn(*args, **kw) File "/opt/home/vo63573/satest/src/sqlalchemy/./test/sql/ test_types.py", line 833, in test_ignoring_unicode_error eq_(x, unicodedata) File "/opt/home/vo63573/satest/src/sqlalchemy/./test/lib/ testing.py", line 499, in eq_ assert a == b, msg or "%r != %r" % (a, b) AssertionError: u'Alors vous imaginez ma surprise, au lever du jour, quand une drle de petite voix m?a rveill. Elle disait: S?il vous plat? dessine-moi un mouton! ' != u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill \xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb' -------------------- >> begin captured logging << -------------------- sqlalchemy.pool.QueuePool: DEBUG: Created new connection <pyodbc.Connection object at 0xa4490e0> sqlalchemy.engine.base.Engine: INFO: SELECT user_name() as user_name; sqlalchemy.engine.base.Engine: INFO: () sqlalchemy.engine.base.Engine: DEBUG: Col ('user_name',) sqlalchemy.engine.base.Engine: DEBUG: Row (u'SPEED_IT', ) sqlalchemy.engine.base.Engine: INFO: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' sqlalchemy.engine.base.Engine: INFO: (u'SPEED_IT',) sqlalchemy.engine.base.Engine: DEBUG: Col ('default_schema_name',) sqlalchemy.engine.base.Engine: DEBUG: Row (u'dbo', ) sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool sqlalchemy.engine.base.Engine: INFO: SELECT [COLUMNS_1]. [TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], [COLUMNS_1]. [ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1].[COLLATION_NAME] FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? sqlalchemy.engine.base.Engine: INFO: (u'unicode_err_table', u'dbo') sqlalchemy.engine.base.Engine: DEBUG: Col ('TABLE_SCHEMA', 'TABLE_NAME', 'COLUMN_NAME', 'IS_NULLABLE', 'DATA_TYPE', 'ORDINAL_POSITION', 'CHARACTER_MAXIMUM_LENGTH', 'NUMERIC_PRECISION', 'NUMERIC_SCALE', 'COLUMN_DEFAULT', 'COLLATION_NAME') sqlalchemy.engine.base.Engine: INFO: CREATE TABLE unicode_err_table ( sort INTEGER NULL, plain_varchar_no_coding_error VARCHAR(248) NULL ) sqlalchemy.engine.base.Engine: INFO: () sqlalchemy.engine.base.Engine: INFO: COMMIT sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool sqlalchemy.engine.base.Engine: INFO: INSERT INTO unicode_err_table (sort, plain_varchar_no_coding_error) VALUES (?, ?) sqlalchemy.engine.base.Engine: INFO: (1, 'Alors vous imaginez ma surprise, au lever du jour, quand une drle de petite voix ma rveill. Elle disait: Sil vous plat dessine-moi un mouton! ') sqlalchemy.engine.base.Engine: INFO: COMMIT sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool sqlalchemy.engine.base.Engine: INFO: SELECT unicode_err_table.sort, unicode_err_table.plain_varchar_no_coding_error FROM unicode_err_table sqlalchemy.engine.base.Engine: INFO: () sqlalchemy.engine.base.Engine: DEBUG: Col ('sort', 'plain_varchar_no_coding_error') sqlalchemy.engine.base.Engine: DEBUG: Row (1, 'Alors vous imaginez ma surprise, au lever du jour, quand une drle de petite voix ma rveill. Elle disait: Sil vous plat dessine-moi un mouton! ') sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool sqlalchemy.engine.base.Engine: INFO: INSERT INTO unicode_err_table (sort, plain_varchar_no_coding_error) VALUES (?, ?) sqlalchemy.engine.base.Engine: INFO: (2, u'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m\u2019a r\xe9veill\xe9. Elle disait: \xab S\u2019il vous pla\xeet\u2026 dessine-moi un mouton! \xbb') sqlalchemy.engine.base.Engine: INFO: COMMIT sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool sqlalchemy.engine.base.Engine: INFO: SELECT unicode_err_table.sort, unicode_err_table.plain_varchar_no_coding_error FROM unicode_err_table ORDER BY unicode_err_table.sort sqlalchemy.engine.base.Engine: INFO: () sqlalchemy.engine.base.Engine: DEBUG: Col ('sort', 'plain_varchar_no_coding_error') sqlalchemy.engine.base.Engine: DEBUG: Row (1, 'Alors vous imaginez ma surprise, au lever du jour, quand une drle de petite voix ma rveill. Elle disait: Sil vous plat dessine-moi un mouton! ') sqlalchemy.engine.base.Engine: DEBUG: Row (2, 'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xf4le de petite voix m?a r \xe9veill\xe9. Elle disait: \xab S?il vous pla\xeet? dessine-moi un mouton! ') sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> checked out from pool sqlalchemy.engine.base.Engine: INFO: SELECT [COLUMNS_1]. [TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], [COLUMNS_1]. [ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1].[COLLATION_NAME] FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? sqlalchemy.engine.base.Engine: INFO: (u'unicode_err_table', u'dbo') sqlalchemy.engine.base.Engine: DEBUG: Col ('TABLE_SCHEMA', 'TABLE_NAME', 'COLUMN_NAME', 'IS_NULLABLE', 'DATA_TYPE', 'ORDINAL_POSITION', 'CHARACTER_MAXIMUM_LENGTH', 'NUMERIC_PRECISION', 'NUMERIC_SCALE', 'COLUMN_DEFAULT', 'COLLATION_NAME') sqlalchemy.engine.base.Engine: DEBUG: Row (u'dbo', u'unicode_err_table', u'sort', 'YES', u'int', 1, None, 10, 0, None, None) sqlalchemy.engine.base.Engine: INFO: DROP TABLE unicode_err_table sqlalchemy.engine.base.Engine: INFO: () sqlalchemy.engine.base.Engine: INFO: COMMIT sqlalchemy.pool.QueuePool: DEBUG: Connection <pyodbc.Connection object at 0xa4490e0> being returned to pool --------------------- >> end captured logging << --------------------- ====================================================================== FAIL: test.sql.test_types.UnicodeTest.test_native_unicode ---------------------------------------------------------------------- Traceback (most recent call last): File "/opt/home/vo63573/satest/lib/python2.6/site-packages/nose/ case.py", line 197, in runTest self.test(*self.arg) File "/opt/home/vo63573/satest/src/sqlalchemy/./test/sql/ test_types.py", line 636, in test_native_unicode testing.db.dialect.returns_unicode_strings) AssertionError: name: mssql driver pyodbc returns_unicode_strings=conditional ---------------------------------------------------------------------- Ran 7 tests in 0.358s On Sep 8, 12:59 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > Hi Victor - > > Since you're there, do you have any luck actually running unit tests ? The > test in particular here is: > > ./sqla_nose.py -v test.sql.test_types:UnicodeTest > --dburi=mssql+pyodbc://user:pass@dsn > > Also, on the Mac, iODBC is the standard ODBC product. unixODBC can be built > though in the past I've found this to have problems - I'll see if I can look > into it again if I have time. > > I have no doubt that this works on linux so the path to my getting this patch > committed is to get everything installed on a linux VM, and getting the tests > to run as well as they did before at least on that platform. > > For OSX I'm not sure where that will lead - if we need to put a doc on the > site saying, "you need to replace OSX's standard ODBC install", then that > will be that, but would need to check that all out first. > > Also sorry I missed that pyodbc ticket 192 was yours. Disturbing that > there's no response from the maintainer ? > > On Sep 8, 2011, at 12:41 PM, Victor Olex wrote: > > > I know of those issues with pyodbc package. Michael, please read my > > first response where I wrote how to build the unixODBC, FreeTDS and > > pyodbc stack. I gave this detail for a reason - i.e. that you can > > replicate my built. > > > By the way I did sqlalchemy level testing as promised. Predictably, > > the DDL using both patched and non-patched PyODBCCOnnector executes > > correctly. The only difference is that parameters are bound to unicode > > strings in the former. This actually works exactly as I would expect > > it i.e. accepts plain string for Unicode fields. Most fields in > > COLUMNS table are sysdate, which generally equates to nvarchar(128). > > Here's complete screenshot for you. > > > ### Without patch: > > > In [29]: speed.metadata.create_all() > > 2011-09-08 12:17:01,094 INFO sqlalchemy.engine.base.Engine SELECT > > [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1]. > > [COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], > > [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1]. > > [CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], > > [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1]. > > [COLLATION_NAME] > > FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] > > WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? > > 2011-09-08 12:17:01,094 INFO sqlalchemy.engine.base.Engine ('A', > > 'dbo') > > 2011-09-08 12:17:01,099 INFO sqlalchemy.engine.base.Engine SELECT > > [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1]. > > [COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], > > [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1]. > > [CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], > > [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1]. > > [COLLATION_NAME] > > FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] > > WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? > > 2011-09-08 12:17:01,099 INFO sqlalchemy.engine.base.Engine ('B', > > 'CMBS') > > 2011-09-08 12:17:01,102 INFO sqlalchemy.engine.base.Engine > > CREATE TABLE [A] ( > > [ID] INTEGER NOT NULL IDENTITY(1,1), > > col1 NTEXT NULL, > > col2 VARCHAR(255) NULL, > > PRIMARY KEY ([ID]) > > ) > > > 2011-09-08 12:17:01,102 INFO sqlalchemy.engine.base.Engine () > > 2011-09-08 12:17:01,152 INFO sqlalchemy.engine.base.Engine COMMIT > > 2011-09-08 12:17:01,154 INFO sqlalchemy.engine.base.Engine > > CREATE TABLE [CMBS].[B] ( > > [ID] INTEGER NOT NULL IDENTITY(1,1), > > col1 NTEXT NULL, > > PRIMARY KEY ([ID]) > > ) > > > 2011-09-08 12:17:01,154 INFO sqlalchemy.engine.base.Engine () > > 2011-09-08 12:17:01,184 INFO sqlalchemy.engine.base.Engine COMMIT > > > In [30]: speed.metadata.drop_all() > > 2011-09-08 12:17:04,729 INFO sqlalchemy.engine.base.Engine SELECT > > [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1]. > > [COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], > > [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1]. > > [CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], > > [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1]. > > [COLLATION_NAME] > > FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] > > WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? > > 2011-09-08 12:17:04,729 INFO sqlalchemy.engine.base.Engine ('B', > > 'CMBS') > > 2011-09-08 12:17:04,734 INFO sqlalchemy.engine.base.Engine SELECT > > [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1]. > > [COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], > > [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1]. > > [CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], > > [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1]. > > [COLLATION_NAME] > > FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] > > WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? > > 2011-09-08 12:17:04,734 INFO sqlalchemy.engine.base.Engine ('A', > > 'dbo') > > 2011-09-08 12:17:04,737 INFO sqlalchemy.engine.base.Engine > > DROP TABLE [CMBS].[B] > > 2011-09-08 12:17:04,737 INFO sqlalchemy.engine.base.Engine () > > 2011-09-08 12:17:04,825 INFO sqlalchemy.engine.base.Engine COMMIT > > 2011-09-08 12:17:04,827 INFO sqlalchemy.engine.base.Engine > > DROP TABLE [A] > > 2011-09-08 12:17:04,827 INFO sqlalchemy.engine.base.Engine () > > 2011-09-08 12:17:04,850 INFO sqlalchemy.engine.base.Engine COMMIT > > > ### With patch: > > > In [5]: speed.metadata.drop_all() > > 2011-09-08 12:20:35,596 INFO sqlalchemy.engine.base.Engine SELECT > > user_name() as user_name; > > 2011-09-08 12:20:35,597 INFO sqlalchemy.engine.base.Engine () > > 2011-09-08 12:20:35,599 INFO sqlalchemy.engine.base.Engine > > SELECT default_schema_name FROM > > sys.database_principals > > WHERE name = ? > > AND type = 'S' > > > 2011-09-08 12:20:35,599 INFO sqlalchemy.engine.base.Engine (u'XXXX',) > > 2011-09-08 12:20:35,608 INFO sqlalchemy.engine.base.Engine SELECT > > [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1]. > > [COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], > > [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1]. > > [CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], > > [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1]. > > [COLLATION_NAME] > > FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] > > WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? > > 2011-09-08 12:20:35,608 INFO sqlalchemy.engine.base.Engine (u'B', > > u'CMBS') > > 2011-09-08 12:20:35,612 INFO sqlalchemy.engine.base.Engine SELECT > > [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1]. > > [COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], > > [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1]. > > [CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], > > [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1]. > > [COLLATION_NAME] > > FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] > > WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? > > 2011-09-08 12:20:35,612 INFO sqlalchemy.engine.base.Engine (u'A', > > u'dbo') > > > In [6]: speed.metadata.create_all() > > 2011-09-08 12:20:50,391 INFO sqlalchemy.engine.base.Engine SELECT > > [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1]. > > [COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], > > [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1]. > > [CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], > > [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1]. > > [COLLATION_NAME] > > FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] > > WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? > > 2011-09-08 12:20:50,391 INFO sqlalchemy.engine.base.Engine (u'A', > > u'dbo') > > 2011-09-08 12:20:50,395 INFO sqlalchemy.engine.base.Engine SELECT > > [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1]. > > [COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], > > [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1]. > > [CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], > > [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1]. > > [COLLATION_NAME] > > FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] > > WHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ? > > 2011-09-08 12:20:50,395 INFO sqlalchemy.engine.base.Engine (u'B', > > u'CMBS') > > 2011-09-08 12:20:50,397 INFO sqlalchemy.engine.base.Engine > > CREATE TABLE [A] ( > > [ID] INTEGER NOT NULL IDENTITY(1,1), > > col1 NTEXT NULL, > > col2 VARCHAR(255) NULL, > > PRIMARY KEY ([ID]) > > ) > > > 2011-09-08 12:20:50,397 INFO sqlalchemy.engine.base.Engine () > > 2011-09-08 12:20:50,487 INFO sqlalchemy.engine.base.Engine COMMIT > > 2011-09-08 12:20:50,489 INFO sqlalchemy.engine.base.Engine > > CREATE TABLE [CMBS].[B] ( > > [ID] INTEGER NOT NULL IDENTITY(1,1), > > col1 NTEXT NULL, > > PRIMARY KEY ([ID]) > > ) > > > 2011-09-08 12:20:50,490 INFO sqlalchemy.engine.base.Engine () > > 2011-09-08 12:20:50,514 INFO sqlalchemy.engine.base.Engine COMMIT > > > On Sep 8, 11:51 am, Michael Bayer <mike...@zzzcomputing.com> wrote: > >> On Sep 8, 2011, at 11:37 AM, Victor Olex wrote: > > >>> Pyodbc issue 209 works fine in my setup. > > >> that is very strange ? There are files missing from the .zip. If you > >> installed from the zip I don't see how it built for you. Here's the > >> original issue: > > >>http://code.google.com/p/pyodbc/issues/detail?id=192 > > >>> I think the key thing is > >>> matching SQL Server version with the correct TDS protocol version and > >>> correct FreeTDS version. > > >> I use tds version 8.0 for this particular DSN and that is working fine in > >> production with FreeTDS 0.82, on both linux and OSX platforms. These > >> issues have all been introduced with FreeTDS 0.91. Here, I tried 7.2 and > >> got slightly better results, though unicode round trips still fail when > >> Python unicodes are passed. PyODBC still dies with "MemoryError" if I > >> attempt to query for a table that already exists. > > >>> Also with regards > > ... > > read more » -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.