如何使用flask_sqlalchemy连接MySQL(含用户名密码)及SQLite设密
关于Flask-SQLAlchemy连接MySQL及SQLite设置密码的问题
一、MySQL连接字符串的正确性
你的连接字符串DB_PRODUCT_PATH = "mysql://admin:passowrd@localhost:3306/mydb"整体格式没问题,但有几个细节得修正和注意:
- 密码拼写错误:你写的
passowrd应该是password,这个不改的话肯定连不上 - 如果你的Python环境用的是
pymysql驱动(而非官方的mysqlclient),连接字符串得改成mysql+pymysql://admin:password@localhost:3306/mydb,不然会报驱动找不到的错误 - 确认MySQL服务在
localhost上正常运行,端口3306是默认值,要是你改过MySQL端口得对应调整 - 提前在MySQL里建好
mydb这个数据库,不然连接时会提示数据库不存在
二、SQLite设置密码的方法
SQLite本身原生不带密码加密功能,要给数据库加密码得用第三方扩展,最常用的是SQLCipher,具体操作如下:
- 安装依赖:
- 先装SQLCipher工具:Ubuntu用
apt install sqlcipher,macOS用brew install sqlcipher,Windows可去官网下载安装包 - Python环境中安装
sqlcipher3库替代默认的sqlite3:pip install sqlcipher3
- 先装SQLCipher工具:Ubuntu用
- 创建加密数据库:
用SQLCipher命令行初始化加密库:sqlcipher your_db.db sqlite> PRAGMA key = '你的密码'; sqlite> CREATE TABLE dummy (id INT); # 随便建个表触发加密,否则数据库仍为未加密状态 sqlite> .exit - 在Flask-SQLAlchemy中连接加密库:
方法一:创建引擎后设置密钥
方法二:直接在连接字符串中携带密钥(部分驱动支持)DB_PRODUCT_PATH = "sqlite:///your_db.db?check_same_thread=False" from sqlalchemy import create_engine engine = create_engine(DB_PRODUCT_PATH) with engine.connect() as conn: conn.execute("PRAGMA key = '你的密码';") # 再将engine传入Flask-SQLAlchemy实例
注意:要确保Flask-SQLAlchemy底层使用的是sqlcipher3驱动,否则无法识别加密数据库。DB_PRODUCT_PATH = "sqlite:///your_db.db?key=你的密码&check_same_thread=False"
内容的提问来源于stack exchange,提问作者Xiao Yuan
相关产品推荐
相关产品推荐

