首页 > 解决方案 > 使用 python 3.6.9 将 django 连接到 mysql

问题描述

我正在尝试在 linux lubuntu 上使用 python 3.6.9 和 django 3.0.1 连接到 mysql

mysql Ver 14.14 Distrib 5.7.28,适用于使用 EditLine 包装器的 Linux (i686)

目前,尽管我尝试安装 mysql 客户端,但在运行 django 服务器时收到此错误消息:

django.core.exceptions.ImproperlyConfigured: Error loading >MySQLdb module.
Did you install mysqlclient?
dpkg --get-selections | grep mysql

libmysqlclient20:i386           install
mysql-client-5.7                install
mysql-client-core-5.7           install
mysql-common                    install
mysql-server                    install
mysql-server-5.7                install
mysql-server-core-5.7           install
python-mysqldb                  install

根据这个,MySQLdb 似乎不支持 python 3:https ://pypi.org/project/MySQL-python/

Django/python 3 还不支持 mysql 吗?我正在努力寻找相关信息。经过大量搜索,我看到了许多关于堆栈溢出的问题,这些问题涉及类似问题,但所有软件的早期版本都是如此。

我已经安装了 pymysql,它成功连接到 mysql 并检索数据,但这似乎对 Django 没有用。

编辑:我试过 pip3 install mysqlclient 但得到了这个输出:

pip3 install mysqlclient
Collecting mysqlclient   Using cached https://files.pythonhosted.org/packages/d0/97/7326248ac8d5049968bf4ec708a5d3d4806e412a42e74160d7f266a3e03a/mysqlclient-1.4.6.tar.gz Building wheels for collected packages: mysqlclient   Running setup.py bdist_wheel for mysqlclient ... error   Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-2rl7qhom/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmpvr8f4qvqpip-wheel- --python-tag cp36:   running bdist_wheel   running build   running build_py   creating build   creating build/lib.linux-i686-3.6   creating build/lib.linux-i686-3.6/MySQLdb   copying MySQLdb/__init__.py -> build/lib.linux-i686-3.6/MySQLdb   copying MySQLdb/_exceptions.py -> build/lib.linux-i686-3.6/MySQLdb   copying MySQLdb/compat.py -> build/lib.linux-i686-3.6/MySQLdb   copying MySQLdb/connections.py -> build/lib.linux-i686-3.6/MySQLdb   copying MySQLdb/converters.py -> build/lib.linux-i686-3.6/MySQLdb   copying MySQLdb/cursors.py -> build/lib.linux-i686-3.6/MySQLdb   copying MySQLdb/release.py -> build/lib.linux-i686-3.6/MySQLdb   copying MySQLdb/times.py -> build/lib.linux-i686-3.6/MySQLdb   creating build/lib.linux-i686-3.6/MySQLdb/constants   copying MySQLdb/constants/__init__.py -> build/lib.linux-i686-3.6/MySQLdb/constants   copying MySQLdb/constants/CLIENT.py -> build/lib.linux-i686-3.6/MySQLdb/constants   copying MySQLdb/constants/CR.py -> build/lib.linux-i686-3.6/MySQLdb/constants  copying MySQLdb/constants/ER.py -> build/lib.linux-i686-3.6/MySQLdb/constants   copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-i686-3.6/MySQLdb/constants   copying MySQLdb/constants/FLAG.py -> build/lib.linux-i686-3.6/MySQLdb/constants   running build_ext   building 'MySQLdb._mysql' extension   creating build/temp.linux-i686-3.6   creating build/temp.linux-i686-3.6/MySQLdb i686-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g
    -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Dversion_info=(1,4,6,'final',0) -D__version__=1.4.6 -I/usr/include/mysql -I/usr/include/python3.6m -c MySQLdb/_mysql.c -o build/temp.linux-i686-3.6/MySQLdb/_mysql.o   i686-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions
    -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-i686-3.6/MySQLdb/_mysql.o -lmysqlclient -lpthread -lz
    -lm -lrt -latomic -lssl -lcrypto -ldl -o build/lib.linux-i686-3.6/MySQLdb/_mysql.cpython-36m-i386-linux-gnu.so  /usr/bin/ld: cannot find -lssl   /usr/bin/ld: cannot find -lcrypto   collect2: error: ld returned 1 exit status   error: command 'i686-linux-gnu-gcc' failed with exit status 1
         ----------------------------------------   Failed building wheel for mysqlclient   Running setup.py clean for mysqlclient Failed to build mysqlclient Installing collected packages: mysqlclient   Running setup.py install for mysqlclient ... error
        Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-2rl7qhom/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install
    --record /tmp/pip-p7jgo6pz-record/install-record.txt --single-version-externally-managed --compile --user --prefix=:
        running install
        running build
        running build_py
        creating build
        creating build/lib.linux-i686-3.6
        creating build/lib.linux-i686-3.6/MySQLdb
        copying MySQLdb/__init__.py -> build/lib.linux-i686-3.6/MySQLdb
        copying MySQLdb/_exceptions.py -> build/lib.linux-i686-3.6/MySQLdb
        copying MySQLdb/compat.py -> build/lib.linux-i686-3.6/MySQLdb
        copying MySQLdb/connections.py -> build/lib.linux-i686-3.6/MySQLdb
        copying MySQLdb/converters.py -> build/lib.linux-i686-3.6/MySQLdb
        copying MySQLdb/cursors.py -> build/lib.linux-i686-3.6/MySQLdb
        copying MySQLdb/release.py -> build/lib.linux-i686-3.6/MySQLdb
        copying MySQLdb/times.py -> build/lib.linux-i686-3.6/MySQLdb
        creating build/lib.linux-i686-3.6/MySQLdb/constants
        copying MySQLdb/constants/__init__.py -> build/lib.linux-i686-3.6/MySQLdb/constants
        copying MySQLdb/constants/CLIENT.py -> build/lib.linux-i686-3.6/MySQLdb/constants
        copying MySQLdb/constants/CR.py -> build/lib.linux-i686-3.6/MySQLdb/constants
        copying MySQLdb/constants/ER.py -> build/lib.linux-i686-3.6/MySQLdb/constants
        copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-i686-3.6/MySQLdb/constants
        copying MySQLdb/constants/FLAG.py -> build/lib.linux-i686-3.6/MySQLdb/constants
        running build_ext
        building 'MySQLdb._mysql' extension
        creating build/temp.linux-i686-3.6
        creating build/temp.linux-i686-3.6/MySQLdb
        i686-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Dversion_info=(1,4,6,'final',0) -D__version__=1.4.6 -I/usr/include/mysql -I/usr/include/python3.6m -c MySQLdb/_mysql.c -o build/temp.linux-i686-3.6/MySQLdb/_mysql.o
        i686-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-i686-3.6/MySQLdb/_mysql.o -lmysqlclient -lpthread -lz
    -lm -lrt -latomic -lssl -lcrypto -ldl -o build/lib.linux-i686-3.6/MySQLdb/_mysql.cpython-36m-i386-linux-gnu.so
        /usr/bin/ld: cannot find -lssl
        /usr/bin/ld: cannot find -lcrypto
        collect2: error: ld returned 1 exit status
        error: command 'i686-linux-gnu-gcc' failed with exit status 1

        ---------------------------------------- Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-2rl7qhom/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install
    --record /tmp/pip-p7jgo6pz-record/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-build-2rl7qhom/mysqlclient/

编辑:我找到了一张相关的票,它使我能够解决这个问题:

安装mysql-python时“找不到-lssl;找不到-lcrypto”?

sudo apt-get install libssl-dev

然后重复:

'pip3 install mysqlclient'

这次没有错误。不确定此链接中两个步骤之前的额外步骤是否必要,但为了其他人的利益,您可能需要遵循这些步骤:

https://pypi.org/project/mysqlclient/

标签: pythonmysqldjangoinstallation

解决方案


如果您安装 mysqlclient,此问题应该会自行解决:

pip3 install mysqlclient

推荐阅读