2万条数据同时新增 mysql_mac + python3 + django2.2 + mysql 遇到数据库连接包问题

Django用到了2.2版本, 开始搭建了新的服务, 出师未捷先采坑

到达数据库迁移的时候, 出现了错误

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

这是一个很烦心的事情, 于是去搜索了一下

Error loading MySQLdb module.Did you install mysqlclient?​blog.arturofm.com
601df44b34ff97e2de30b3d0d56354ab.png

大致就是说,安装pymysql包

pip install pymysql

然后在与想settings.py 同一文件夹的_init_.py中增加

import pymysql

pymysql.install_as_MySQLdb()

增加完成了之后又出现了错误

File "/Users/lixiang/.env/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module>
    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

说你的pymysql的版本是0.9.3, 同时需要mysqlclient需要1.3.13(记住这句话, 标记为 ”错误理解“),我有傻傻的去安装mysqlclient,

pip install mysqlclient==1.3.13

结果还是原来的错误, 还是原来的懵逼

继续查, 有查到了解决方案

Django - installing mysqlclient error: mysqlclient 1.3.13 or newer is required; you have 0.9.3​stackoverflow.com
9f2097c18dd3f97040c65d5910d8343d.png

方案是去Django的包中改代码

路径是: /Users/lixiang/.env/lib/python3.6/site-packages/django/db/backends/mysql/base.py

把这行

if version < (1, 3, 13):
   raise ImproperlyConfigured(
       'mysqlclient 1.3.13 or newer is required; you have %s.'
       % Database.__version__
   )
   

改成这样, 也就是注释:

if version < (1, 3, 13):
   pass
   '''
   raise ImproperlyConfigured(
       'mysqlclient 1.3.13 or newer is required; you have %s.'
       % Database.__version__
   )
   '''

然后在改另一个文件

路径是: /Users/lixiang/.env/lib/python3.6/site-packages/django/db/backends/mysql/operations.py

把这行

query = query.decode(errors='replace')

改成

query = query.encode(errors='replace')

完美解决

(.env) ➜  cws python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

但是确实有点瑕疵

就是因为我在修改/Users/lixiang/.env/lib/python3.6/site-packages/django/db/backends/mysql/base.py文件是时候发现了这样一块

5ba231fe22ee0319d8aa1f3f93338220.png
MySQL database backend for Django.

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

显示django mysql数据后台, 需要mysqlclient包, 地址为

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

忽然有些明白了, Django后台需要的包是不是mysqlclient, 查查看

python3应该用pymysql还是mysqlclient?两者有什么区别?​www.zhihu.com

mysqlclient是python3的mysql版本, 这么一想pymysql我做的这些东西都是为了兼容, 上边理解错误的话, 其实是把pymsql的0.9.3版本 当成了mysqlclient版本

还是使用mysqlclient吧

上边mysqlclient的地址已经有很详细的安装说明了, 主要说一下mac上的安装, 需要先安装mysql-connector-c

brew install mysql-connector-c # macOS (Homebrew) (Currently, it has bug. See below)

因为我已经装过了, 这里重装一下,为了掩饰(安装: brew install mysql-connector-c)

(.env) ➜  brew reinstall mysql-connector-c
==> Reinstalling mysql-connector-c
==> Downloading https://homebrew.bintray.com/bottles/mysql-connector-c-6.1.11.high_sierra.bottle.tar.
Already downloaded: /Users/lixiang/Library/Caches/Homebrew/downloads/c68782c842162dcb79a96dd6b880e906521be7595069066f870426f1de9aba35--mysql-connector-c-6.1.11.high_sierra.bottle.tar.gz
==> Pouring mysql-connector-c-6.1.11.high_sierra.bottle.tar.gz
   /usr/local/Cellar/mysql-connector-c/6.1.11: 79 files, 15.3MB

然后修改mysql_config

vim /usr/local/Cellar/mysql-connector-c/6.1.11/bin/mysql_config

因为有bug, 需要将

# on macOS, on or about line 112:
# Create options
libs="-L$pkglibdir"
libs="$libs -l "

改为

# Create options
libs="-L$pkglibdir"
libs="$libs -lmysqlclient -lssl -lcrypto"

这个ssl也可能有问题, 下面链接可以解决

https://stackoverflow.com/questions/49025594/osx-ld-library-not-found-for-lssl​stackoverflow.comOSX ld: library not found for -lssl https://stackoverflow.com/questions/49025594/osx-ld-library-not-found-for-lssl​stackoverflow.com

然后做一次link

(.env) ➜  brew link mysql-connector-c
Linking /usr/local/Cellar/mysql-connector-c/6.1.11... 48 symlinks created

最后强制mysqlclient重新编译和安装:

pip install --force-reinstall --ignore-installed --no-binary :all: mysqlclient

我本地安装mysql客户端, 使用的是docker, 可能你还有问题, 可以使用下面链接解决

Fresh python 3.7 / django 2.2.1 installation not recognising that mysqlclient is installed​stackoverflow.com
9f2097c18dd3f97040c65d5910d8343d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值