我有一个运行良好的Django应用程序。然后我得到一些更新错误。它们都是以下形式:
no such table: main.event_contestant__old
我的环境是MacOs 10.12.6上的Python 3.7.2,Django 2.1.5
经过几天的搜索,这似乎是由Django与sqlite3 V2.6(v3.26)之间的某些不兼容引起的错误。
我尝试使用Django 2.0.7、2.1.5和2.1.7版本,但错误仍然存在,因此,在Django 2.1.5中所做的任何旨在修复该错误的操作均无效。
进一步的阅读表明该错误是sqlite 2.6.0附带的,而旧版本的python使用的是旧版本的sqlite3。因此,我将python版本更改为3.5,但sqlite的版本未更改。
我的问题是-为什么当我使用其他版本的python时,sqlite版本不会更改?
更新:
从python.org安装python 3.5.4
为python 3.5.4创建虚拟环境并运行它
Python 3.5.4 (v3.5.4:3f56838976, Aug 7 2017, 12:56:33)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.8.11'
>>>
对python 3.6.5做同样的事情:
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.22.0'
>>>
再次使用python 3.7.2获取
Python 3.7.2 (v3.7.2:9a3ffc0492, Dec 24 2018, 02:44:43)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.22.0'
>>>
好。看来我必须回到python 3.5.4才能获得不同版本的sqlite3,但实际版本确实随着不同的Python安装而改变。
现在,我需要再次测试这些版本,以及我在Django中的错误。
我已经在下面回答了我的问题,以指示此更新。可能,我会再回覆有关Django的问题。
答案 0 :(得分:0)
简短的答案是Python确实安装了不同版本的sqlite。我的问题是我将旧版本的版本号(例如sqlite.version => 2.6.0)与较新的版本控制(例如sqlite.sqlite_version => 3.8.11)混淆。
我已经更新了问题,以显示如何获取版本号以及最近的三个Python 3版本之间的区别。