我有一个可以在本地Python 3.6版本上完美运行的Django应用,并希望确保将其安装在其他地方后也可以使用。
由于这个原因,我使用完全相同的Python版本创建了一个virtualenv,该版本在全球都可以正常使用,但是没有任何软件包:
virtualenv --no-site-packages --python=$(which python3.6) clear_env
source clear_env/bin/activate
然后我在本地安装了需求:
pip install -r requirements.txt
当我尝试运行服务器时,甚至当我使用管理面板并对数据库进行更改时,一切都正常。 但是,当我运行测试时:
python manage.py test --nomigrations
我收到以下错误:
django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL, `user_id` integer NOT NULL, `content_type_id` integer NULL, `objec' at line 1")
回溯到:
File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
return self.cursor.execute(sql)
File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 71, in execute
return self.cursor.execute(query, args)
File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/MySQLdb/cursors.py", line 206, in execute
res = self._query(query)
File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/MySQLdb/cursors.py", line 312, in _query
db.query(q)
File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/MySQLdb/connections.py", line 224, in query
_mysql.connection.query(self, query)
MySQLdb._exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL, `user_id` integer NOT NULL, `content_type_id` integer NULL, `objec' at line 1")
注意:我在测试中使用--nomigrations
标志来避免使用this issue。在我的全球Python环境中,这再次完美地发挥了作用。
最初,我认为该问题可能与缺少的Linux MySQL / Python软件包similar to that issue有关。我记得曾经有一次必须安装libmysqlclient-dev python-dev
之类的东西并重新编译Python版本才能使其正常工作。
但是,如果我的virutalenv使用的是全球通用的相同Python版本,那可能是什么原因?甚至更奇怪的是,为什么只有测试失败并显示该错误,并且runserver
以及与DB相关的其他所有功能都正常工作?
答案 0 :(得分:0)
已解决。这是由于rawdata<-read.table(header = TRUE, text="q1 q2 q3
a1 b2 c1
a2 b1 c2
a3 b1 ''")
l = list(q1=list(a1="alpha",a2="beta"), q2=list(b1="gamma",b2="delta"), q3=list(c1="epsilon",c2="zeta"))
#make copy of data to update
answer<-rawdata
#loop through the question columns in rawdata
for (n in names(rawdata)) {
#match the answer to the provide list
mat<-match(rawdata[[n]], names(l[[n]]))
#convert from factors to character type
answer[[n]]<-as.character(answer[[n]])
#Remove any NA answers and
#update the rows and column in the copy of the original data
answer[[n]][which(!is.na(mat))]<- unlist(l[[n]][mat[!is.na(mat)]])
}
answer
q1 q2 q3
1 alpha delta epsilon
2 beta gamma zeta
3 a3 gamma
中可能存在的错误,我使用它来构建pipreqs
。我的全局应用程序版本使用的是requirements.txt
,而我使用的是Mysql 5.5。由于某些原因,Django==2.0
已指定为要求pipreqs
,仅支持MySQL> 5.6,如here所述
结果,在virtualenv中执行全新需求安装时,安装了较新的Django版本,该版本与我的本地MySQL版本无法正常通信。