thanks, the two test failures would be expected in this case, will see what 
response I get on the FreeTDS list if any.


On Sep 8, 2011, at 3:07 PM, Victor Olex wrote:

> 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 <[email protected]> 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 <[email protected]> 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 [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to