-
-
Notifications
You must be signed in to change notification settings - Fork 31.7k
sqlite3 cursor.description seems to rely on incomplete statement parsing for detection #65917
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Per DBAPI and pysqlite docs, .description must be available for any SELECT statement regardless of whether or not rows are returned. However, this fails for SELECT statements that aren't simple "SELECT"s, such as those that use CTEs and therefore start out with "WITH:": import sqlite3
conn = sqlite3.connect(":memory:")
cursor = conn.cursor()
cursor.execute("""
create table foo (id integer primary key, data varchar(20))
""") cursor.execute(""" cursor.execute("""
with bar as (select * from foo)
select * from bar where id = 10
""") assert cursor.description is not None cursor.execute("""
with bar as (select * from foo)
select * from bar where id = 11
""") assert cursor.description is not None the second statement returns no rows and cursor.description is None. Libraries like SQLAlchemy which rely on this to determine that the statement supports fetchone() and similar are blocked. |
It is true that the sqlite interface does not support WITH currently. It is an interesting question whether or not we could change this as a bug fix or not...I suppose it depends on whether or not it changes any behavior other than making .description work. |
this patch fixes the bug. |
ping |
It's more a matter of my finding time to fully research the problem and solution than an issue of reviewing the patch itself. There is also potential cross-talk with other patches involving sqllite statement parsing. Since the sqlite wrapper doesn't currently have an active maintainer, I'm afraid it may be a bit before any review of these issues happen. If you can get other community members (doesn't have to be committers) to do reviews (of the concepts as well as the patch itself) that would be helpful. (python-list might be a place to recruit some interest.) (Personally I find the fact the the wrapper has to do statement parsing at all to be problematic, but there may be no good solution to that problem when you consider backward compatibility issues.) |
I have now committed a fix in the pysqlite project at github. ghaering/pysqlite@f67fa9c I'll eventually merge it into the Python tree. |
Are you going to merge it into 2.7.10? |
It looks to me like a patch that could be merged as a bug fix. |
is this going to be fixed in 2.7.10? |
Attached is the patch ported to python2.7. However, the test doesn't fail for me before I apply (compile) the fix. |
I adapted the reproducer in msg220263 and added more tests. |
New changeset 45ef062734d6 by Berker Peksag in branch '3.5': New changeset cf18375732ae by Berker Peksag in branch 'default': |
will the fix be backported to 2.7? |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: