Skip to content
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

sqlite3 package document mistake #86790

Closed
seeker-Liu mannequin opened this issue Dec 12, 2020 · 10 comments
Closed

sqlite3 package document mistake #86790

seeker-Liu mannequin opened this issue Dec 12, 2020 · 10 comments
Labels
3.9 only security fixes docs Documentation in the Doc dir topic-sqlite3 type-bug An unexpected behavior, bug, or error

Comments

@seeker-Liu
Copy link
Mannequin

seeker-Liu mannequin commented Dec 12, 2020

BPO 42624
Nosy @terryjreedy, @berkerpeksag, @erlend-aasland, @seeker-Liu

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:

assignee = None
closed_at = None
created_at = <Date 2020-12-12.08:47:49.871>
labels = ['type-bug', '3.9', 'docs']
title = 'sqlite3 package document mistake'
updated_at = <Date 2021-02-12.12:00:09.639>
user = 'https://github.com/seeker-Liu'

bugs.python.org fields:

activity = <Date 2021-02-12.12:00:09.639>
actor = 'erlendaasland'
assignee = 'docs@python'
closed = False
closed_date = None
closer = None
components = ['Documentation']
creation = <Date 2020-12-12.08:47:49.871>
creator = 'seeker-Liu'
dependencies = []
files = []
hgrepos = []
issue_num = 42624
keywords = []
message_count = 7.0
messages = ['382904', '383329', '383367', '386859', '386860', '386861', '386862']
nosy_count = 6.0
nosy_names = ['terry.reedy', 'ghaering', 'docs@python', 'berker.peksag', 'erlendaasland', 'seeker-Liu']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue42624'
versions = ['Python 3.9']

@seeker-Liu
Copy link
Mannequin Author

seeker-Liu mannequin commented Dec 12, 2020

In the document about sqlite3 package, it was suggested that when users are trying to create a table already exists, sqlite3.ProgrammingError is going to be thrown. However, the actual exception thrown is sqlite3.OperationalError, which is inconsistent with the document.

Doc: https://docs.python.org/3/library/sqlite3.html#exceptions

@seeker-Liu seeker-Liu mannequin added the 3.9 only security fixes label Dec 12, 2020
@seeker-Liu seeker-Liu mannequin assigned docspython Dec 12, 2020
@seeker-Liu seeker-Liu mannequin added docs Documentation in the Doc dir type-bug An unexpected behavior, bug, or error labels Dec 12, 2020
@terryjreedy
Copy link
Member

The doc is the same in 3.10.

What OS and exact Python release? Can you post minimal code that verifies your claim? (Someone what have to verify with 3.10 also.)

This would strike me as an error in the code. We can fix 'wrong Exception' in the next release. I am not sure whether we would do so in a current release.

@seeker-Liu
Copy link
Mannequin Author

seeker-Liu mannequin commented Dec 19, 2020

Python 3.9.1 (default, Dec 11 2020, 14:32:07) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> conn = sqlite3.connect("test.db")
>>> conn.execute("CREATE TABLE test (id INTEGER, str TEXT);")
<sqlite3.Cursor object at 0x7ff99f2df3b0>
>>> conn.execute("CREATE TABLE test (id INTEGER, str TEXT);")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.OperationalError: table test already exists
>>> 

I think the reproduction is way too easy and has nothing special so I didn't include one at the very beginning. That's a simple reproduction on interactive console.

@erlend-aasland
Copy link
Contributor

erlend-aasland commented Feb 12, 2021

Exception originates from _pysqlite_seterror() in Modules/_sqlite/util.c, line 64:
https://github.com/python/cpython/blob/master/Modules/_sqlite/util.c#L64

Error code 1 (SQLITE_ERROR, https://sqlite.org/rescode.html#error) is a generic sqlite3 error. Changing the default sqlite3 exception for this error code may not be what we want.

Anyway, we should clean up the exceptions emitted in the sqlite3 module. There are other inconsistencies apart from this.

@erlend-aasland
Copy link
Contributor

erlend-aasland commented Feb 12, 2021

Ref. gh-68327 (bpo-24139)

@erlend-aasland
Copy link
Contributor

erlend-aasland commented Feb 12, 2021

... and also gh-60583 (bpo-16379)

@erlend-aasland
Copy link
Contributor

*error handling => exception emitted

@ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
@erlend-aasland
Copy link
Contributor

erlend-aasland commented Jun 8, 2022

The sqlite3 exception docs section has been rewritten in main (Python 3.12) by gh-27645, so this is considered fixed in main. I decided not to backport the docs update, because there's been a lot of work related to improving the exceptions raised by the sqlite3 extension module, and only parts of that work exists in 3.11, and even less in 3.10.

@erlend-aasland
Copy link
Contributor

We could backport gh-27645 to 3.11, and possibly also 3.10, but it will be hairy.

@erlend-aasland
Copy link
Contributor

I backported gh-27645 to 3.11 and 3.10:

I consider this issue resolved. If there are further inconsistencies, please open a new issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.9 only security fixes docs Documentation in the Doc dir topic-sqlite3 type-bug An unexpected behavior, bug, or error
Projects
Status: Done
Development

No branches or pull requests

2 participants