python3已经有了pymysql_mac + python3 + django2.2 + mysql 遇到数据库连接包问题

在使用Django2.2版本搭建新服务时遇到数据库迁移错误,问题涉及mysqlclient和pymysql的版本冲突。通过安装pymysql并修改Django源码暂时解决问题,但最终确定需要正确安装mysqlclient。在macOS上,需要解决mysql-connector-c的bug,通过brew安装并链接,然后重新编译和安装mysqlclient。经过这一系列操作,成功完成数据库迁移。

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
e1ca98ff5f78e4891fa8350760b2f754.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
e38c0918658090ea2c553fcf43115332.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文件是时候发现了这样一块

6972ee4e1436325daf2347fe1508df47.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
zhihu-card-default.svg

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 -lsslhttps://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
e38c0918658090ea2c553fcf43115332.png
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值