如何在SQLAlchemy的MySQL连接中配置allowPublicKeyRetrieval与useSSL参数?
解决SQLAlchemy MySQL连接添加allowPublicKeyRetrieval和useSSL参数的问题
1. 先明确使用的MySQL驱动
SQLAlchemy连接MySQL必须指定具体驱动,常见的两种选择:
mysqlclient:原生C驱动,性能更优pymysql:纯Python驱动,兼容性更好
如果URL里没指定驱动,SQLAlchemy会用默认驱动,容易出现参数不兼容的情况。
2. 直接拼接URL的正确写法
在URL末尾追加参数时,必须带上驱动前缀,示例如下:
- 用pymysql驱动:
from sqlalchemy import create_engine url = 'mysql+pymysql://poopoo:peepee@localhost:32913/test?allowPublicKeyRetrieval=true&useSSL=false' engine = create_engine(url) - 用mysqlclient驱动:
url = 'mysql+mysqldb://poopoo:peepee@localhost:32913/test?allow_public_key_retrieval=true&use_ssl=false' engine = create_engine(url)
注意:mysqlclient要求参数名用下划线格式(allow_public_key_retrieval、use_ssl),pymysql则同时支持驼峰和下划线格式。
3. 用connect_args传递参数(更灵活)
如果不想在URL里暴露参数,或者需要动态配置,推荐用connect_args参数,同样要匹配驱动的参数名:
- 针对pymysql:
engine = create_engine( 'mysql+pymysql://poopoo:peepee@localhost:32913/test', connect_args={ 'allowPublicKeyRetrieval': True, 'useSSL': False } ) - 针对mysqlclient:
engine = create_engine( 'mysql+mysqldb://poopoo:peepee@localhost:32913/test', connect_args={ 'allow_public_key_retrieval': True, 'use_ssl': False } )
4. 之前触发TypeError的原因
你遇到的错误大概率是这两个原因:
- 没指定驱动前缀,SQLAlchemy用了默认驱动,但参数名(比如驼峰格式)和驱动要求不匹配
connect_args里的参数名和当前使用的驱动期望的格式不一致(比如给mysqlclient传了驼峰名)
验证连接是否成功
可以用这段代码快速测试:
with engine.connect() as conn: result = conn.execute("SELECT 1") print(result.fetchone())
内容的提问来源于stack exchange,提问作者frimann
相关产品推荐
相关产品推荐

