QMySql & SqlAlchemy 填坑记录(Mac OS)

QMySql & SqlAlchemy 填坑记录(Mac OS)

零蚀


QMYSQL driver not loaded 问题及解决

没有QMYSQL驱动情况

在使用QMYSQL时候先要知道你的pyqt5是有没有MySql的驱动的,如果连驱动都没有,那做其他的一点用都没效果,花个一天半天在这种问题上是没有意义且打击人的!所以要用以下的代码来查看自己支持哪些数据库,

from PyQt5 import QtSql
print(QtSql.QSqlDatabase.drivers())

当没有QMYSQL 时,死心吧,说明你的版本是不支持QMYSQL的,别问为什么,因为只有pyqt5 5.12.1版本才支持QMYSQL。所以下一个5.12.1吧。(如果想用的其他版本可以试着下一个libqsqlmysql.dylib 放在QT的驱动文件里)

# 卸载本地
pip uninstall pyqt5
pip install pyqt5==5.12.1
# 其中安装网速很慢,所以我试了以下方式,显示加载的也是5.12.1
pip install pyqt5==5.12

通过以上的安装,重新测试,发现终于有了QMYSQL,但是还若是显示driver not loaded。这主要是QT数据库调用的版本问题,版本号对不上,所以出现了问题。


有QMYSQL驱动情况

首先看看自己的QT调用数据库的目标版本,看自己项目里的sql驱动文件夹中mysql驱动的目标版本号:

otool -L /Users/xxxxxx/workspace/python/test/mysqldemo/venv/lib/python3.8/site-packages/PyQt5/Qt/plugins/sqldrivers/libqsqlmysql.dylib 

得到的结果是:

libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0)
	@rpath/QtSql.framework/Versions/5/QtSql (compatibility version 5.12.0, current version 5.12.1)
	@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.12.0, current version 5.12.1)
	/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
	/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
	/usr/local/mysql/lib/libmysqlclient.20.dylib (compatibility version 20.0.0, current version 20.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)

其中调用的是/usr/local/mysql/lib/libmysqlclient.20.dylib,为20的mysql数据库版本,但是打开我的mysql其中版本为21(libmysqlclient.21.dylib):

ls /usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysql

libmysqlclient.21.dylib*  libmysqlclient.dylib@                             
libmysqlclient.a          libmysqlservices.a  

所以需要将数据库目标指定为21:

sudo install_name_tool -change /usr/local/mysql/lib/libmysqlclient.20.dylib /usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib /Users/xxxx/workspace/python/test/mysqldemo/venv/lib/python3.8/site-packages/PyQt5/Qt/pluginotool -L /Users/xxxx/workspace/python/test/mysqldemo/venv/lib/python3.8/site-packages/PyQt5/Qt/plugins/sqldrivers/libqsqlmysql.dylib

这里-change 后第一个参数是old lib,第二个参数是现在重新指定的 new lib ,这都没问题,最后第三个参数是项目里面指定mysql的lib。整体是将old转换为new 注入项目的指定mysql 的lib中。

网上就没找到一个写的全的,找资料也特琐碎,所以总结一下(人生苦短,用pyqt更短)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qT70MnnJ-1582103353319)(media/15820476757750/11.gif)]


SqlAlchemy No module named ‘MySQLdb’

  • 查问题所在

    缺少 MySQLdb 这个模块,既然缺少模块,检查一下自己的pycharm,是否安装了project,我们可以利用pymysql作为中间桥梁连接mysql。

    pip install pymysql
    

    将数据库连接改为 mysql+pymysql://username:password@localhost:3306/db,接下来的操作就一切正常了。

  • 密码问题

    untimeError: cryptography is required for sha256_password or caching_sha2_password

    主要问题是mysql运用sha256签名的密码,而python没有这个需要安装插件

    pip  install cryptography
    

🔗 NO.7 Python操作MySQL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零蚀zero eclipse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值