【问题标题】:Django Segmentation fault when changing database to mysql in settings.py在 settings.py 中将数据库更改为 mysql 时出现 Django 分段错误
【发布时间】:2020-02-04 13:29:39
【问题描述】:

我的问题与error connecting mysql to django 的问题类似,但没有得到解答。

我正在使用 python 3.6.5mysql server-5.7.29Ubuntu 18.04 LTS。我正在尝试为我的 django 应用程序设置 mysql,但收到分段错误。

(env) monu@monu:~/Desktop/ShubhamProject/ShubhamProject$ python manage.py runserver
Segmentation fault (core dumped)

如果我使用默认的 sqlite3 数据库,服务器就会启动。

settings.py 中的数据库部分看起来像

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'sports_website',
        'USER': 'nonroot',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

使用以下软件包

asgiref==3.2.3
Django==3.0.3
django-crispy-forms==1.8.1
mysqlclient==1.4.6
pytz==2019.3
sqlparse==0.3.0

【问题讨论】:

  • 这可能是由于 openssl 版本错误/不兼容造成的。我会为您的系统重新安装构建库,如文档所述here:sudo apt-get install python3-dev default-libmysqlclient-dev build-essential libssl-dev,然后重新安装 mysqlclient。
  • 不幸的是,事实并非如此。我在安装 mysqlclient 之前和之后运行更新和升级,并通过运行建议的软件包列表来验证软件包是最新的。
  • 尝试在您的 virtualenv 中打开一个 python shell,导入MySQLdb 并手动连接到您的数据库(参见here)。这至少会告诉我们这是否与 Django 或仅与 mysqlclient 有关。
  • 尝试导入 MySQLdb 时出现分段错误

标签: python mysql django


【解决方案1】:

安装 pymysql 并在顶部的 settings.py 中添加以下内容。

import pymysql
pymysql.version_info = (1, 4, 6, 'final', 0)
pymysql.install_as_MySQLdb()

【讨论】:

  • pymysql 解决方案确实有效。非常感谢。但是我不明白为什么 mysqlclient 在 django docs 推荐的方式下似乎不起作用。
【解决方案2】:

这是因为django使用MySQLdb驱动,但是MYSQLdb不支持python3,所以在settings.py中设置驱动为pymysql: 首先:pip install pymysql 并添加:导入 pymysql pymysql.install_as_MySQLdb()

【讨论】:

猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 2020-05-11
  • 2013-12-02
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多