On Apr 29, 2009, at 10:08 AM, Tom Wood <thomas.a.w...@gmail.com> wrote:

>
> Some additional info, and a possible fix:
>
> I can reproduce this problem running the SQLAlchemy dialect unit
> tests.  Using a trunk (r5930) checkout, FreeTDS 0.82 with tds protocol
> version 8.0, pyodbc 2.1.4, Python 2.5 and SQL Server 2005, I see three
> test failures in dialect.mssql:
>
> test_binary fails with:
>
> DataError: (DataError) ('22018', '[22018] [FreeTDS][SQL Server]
> Implicit conversion from data type varchar to varbinary is not
> allowed. Use the CONVERT function to run this query. (257)
> (SQLPrepare)') 'INSERT INTO binary_table (primary_id, data,
> data_image, data_slice, misc, pickled, mypickle) VALUES
> (?, ?, ?, ?, ?, ?, ?)' [1, <read-only buffer for 0x842e680, size -1,
> offset 0 at 0xb75c8f80>, <read-only buffer for 0x842e680, size -1,
> offset 0 at 0xb75c8f60>, <read-only buffer for 0xb75e9c20, size -1,
> offset 0 at 0xb75d00a0>, 'binary_data_one.dat', <read-only buffer for
> 0xb75c67a0, size -1, offset 0 at 0xb75d0180>, <read-only buffer for
> 0xb75d9d68, size -1, offset 0 at 0xb75d0100>]
>
> I'm going to ignore this for now, since it seems to be unrelated to my
> problem.

This failure has started about a month ago and I haven't had time to  
investigate.

>
>
> However, test_fetchid_trigger and test_slice_mssql both fail with the
> Invalid cursor state exception:
>
>  File "/home/taw00008/src/sqlalchemy-trunk/lib/sqlalchemy/engine/
> base.py", line 931, in _handle_dbapi_exception
>    raise exc.DBAPIError.instance(statement, parameters, e,
> connection_invalidated=is_disconnect)
> ProgrammingError: (ProgrammingError) ('24000', '[24000] [FreeTDS][SQL
> Server]Invalid cursor state (0) (SQLExecDirectW)') 'INSERT INTO foo
> (bar, range) VALUES (?, ?); select scope_identity()' [1, 1]
>
> Here's a possible fix.  The following patch to mssql.py corrects my
> problems, as well as the test_fetchid_trigger and test_slice_mssql
> failures:

Interesting fix. I'll apply and test against windows and pyodbc.

>
>
> Index: lib/sqlalchemy/databases/mssql.py
> ===================================================================
> --- lib/sqlalchemy/databases/mssql.py   (revision 5930)
> +++ lib/sqlalchemy/databases/mssql.py   (working copy)
> @@ -991,7 +991,7 @@
>             # We may have to skip over a number of result sets with
> no data (due to triggers, etc.)
>             while True:
>                 try:
> -                    row = self.cursor.fetchone()
> +                    row = self.cursor.fetchall()[0]
>                     break
>                 except pyodbc.Error, e:
>                     self.cursor.nextset()
>
> I.e., calling fetchall() instead of fetchone() seems to clean up the
> cursor state.
>
> Two caveats: (1) there are many other (non dialect) test failures with
> and without my patch, although the patch does reduce the number.  So
> maybe there is something amok with my configuration.  (2) I'm only
> tried this on Debian--I have no idea what would happen on Windows.
> >

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to