MAC系统使用flask_sqlalchemy连接mysql数据库报错(Library not loaded: @rpath/libmysqlclient.21.dylib)

使用flask_sqlalchemy连接mysql数据库时,报了很长一串错误,通过百度和自己倒腾,终于解决了这个问题。
首先,来看看代码:

# import pymysql
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

# pymysql.version_info = (1, 4, 13, "final", 0)
# pymysql.install_as_MySQLdb()
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@localhost:3306/flask_test'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), nullable=False)

报了如下错误:

 ImportError: dlopen(/Users/lhy/PycharmProjects/flask Project/venv/lib/python3.6/site-packages/MySQLdb/_mysql.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libmysqlclient.21.dylib Referenced from: /Users/llhy/PycharmProjects/flaskProject/venv/lib/python3.6/site-packages/MySQLdb/_mysql.cpython-36m-darwin.so Reason: image not found

通过百度之后,知道是libmysqlclient.21.dylib文件没有导入的原因造成的问题。因此,需要对其进行软连接到系统库中。如下:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/lib/libmysqlclient.21.dylib

并不顺利,报了第一个错误,即:

ln:/usr/lib/libmysqlclient.21.dylib:operation not permitted

这是因为我的mac升级之后开启了SIP(System Integrity Protection),增加了rootless机制,导致即使在root权限下依然无法修改文件,在必要时候为了能够修改下面的文件,我们只能关闭该保护机制(https://www.macdo.cn/21918.html)。
1)重启,过程中按住 command+R,进入保护模式

2)打开terminal终端,输入

csrutil disable

3)再次重启,即可对 usr/bin 目录下文件进行修改

PS:如果要恢复保护机制,重新进入保护模式,输入

csrutil enable

成功之后,再次运行:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/lib/libmysqlclient.21.dylib

又再次遇上了问题:

ln: /usr/lib/libmysqlclient.21.dylib: Read-only file system

感觉还是不行创建/usr/lib/libmysqlclient.21.dylib的软连接,怎么办呢?我们还可以通过创建/usr/local/lib/libmysqlclient.21.dylib软连接来解决这个问题。

sudo ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/local/lib/libmysqlclient.21.dylib

最终,通过:

from flask_sql.app import db

db.create_all()

在flask_test数据库中成功创建了user表。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值