当前位置: 代码迷 >> 综合 >> QMySql SqlAlchemy 填坑记录(Mac OS)
  详细解决方案

QMySql SqlAlchemy 填坑记录(Mac OS)

热度:40   发布时间:2023-12-15 16:32:06.0

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/libmysqllibmysqlclient.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