在virtualenv中运行测试时,Django MySQL错误

时间:2019-02-28 17:20:53

标签: python mysql django virtualenv django-testing

我有一个可以在本地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相关的其他所有功能都正常工作?

1 个答案:

答案 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版本无法正常通信。