#2944 closed defect (invalid)
With Python 2.5 dbshell launches wrong sqlite shell
Reported by: | Owned by: | Adrian Holovaty | |
---|---|---|---|
Component: | Core (Management commands) | Version: | |
Severity: | normal | Keywords: | |
Cc: | goldner@… | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
manage.py dbshell launches the sqlite on the command line. But the chances of this being the same version as Python 2.5's embedded one are fairly slim. Unfortunately the file format is different between versions so the shell for one version is not necessarily compatible with the Python version. There should be some check of the form:
os.popen("sqlite3 -version").read().strip("\n") == sqlite3.version
In this case, perhaps Django should fall back to this pseudo-shell thing:
Change History (6)
comment:1 by , 18 years ago
Component: | Tools → django-admin.py |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 18 years ago
Cc: | added |
---|
comment:3 by , 17 years ago
comment:4 by , 17 years ago
I'm not sure exactly what the problem is here. As I understand it, Python's sqlite3
module is merely a wrapper around an external SQLite library, presumably the same one being used by the sqlite3
command-line program.
The suggested test is likely to be always false because executing sqlite3 -version
in a shell gives you the version number of the underlying SQLite installation whereas sqlite3.version
in a Python environment gives you the version number of the wrapper, and the two version numbers are unrelated.
Or have I completely missed the point?...
comment:5 by , 17 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
I'm confused by the request as well (and I'm the one who created the original "dbshell" command).
As Nick notes, there are two pieces to using SQLite with Python: DB-API modules, and the SQLite C library. (The command-line SQLite client interacts with the library and has nothing to do with Python per se.)
Python 2.5 ships with SQLite *bindings* in the form of a "sqlite3" DB-API module in the standard library. This means you no longer need the third-party "pysqlite2" DB-API module. But *both* of those modules require that you have version 3 of the SQLite binary (library) installed on your machine.
Django already has code that takes care of doing the right import depending on your Python version.
Confusingly, the "2" in the name of the "pysqlite2" module refers not to SQLite 2 (which does have a different file format from SQLite 3), but presumably to the fact that it's the second major version of the pysqlite module. Both the pysqlite2 module and the new sqlite3 module talk to SQLite version 3 only.
I'm marking this as "invalid" for now; please reopen with clarification if we have misunderstood.
comment:6 by , 17 years ago
My, I don't really know my reasoning when I put this into approved. So, yeah, let's keep this closed until someone can verify it.
Hi
I'm interested in taking up this, can someone just tell me what to do? I'm interested in getting involved with djangoproject.
Thanks,
Alagu
alagu.net