如何使用 mysqlconnector 获取 sqlalchemy.create_engine 以使用 mysql_native_password 进行连接?

baf*_*orn 3 python mysql sqlalchemy mysql-connector-python

我正在使用 pandas 和 sqlalchemy,并且想将 DataFrame 加载到 MySQL 数据库中。我目前正在使用此代码片段:

db_connection = sqlalchemy.create_engine('mysql+mysqlconnector://user:pwd@hostname/db_name')

some_data_ref.to_sql(con=db_connection, name='db_table_name', if_exists='replace')
Run Code Online (Sandbox Code Playgroud)

sqlalchemypandas在此之前已导入。

我的 MySQL 后端是 8.x,我知道它使用caching_sha2_password. 如果我要使用连接到数据库mysql.connector.connect并且我想使用该mysql_native_password方法,我知道我应该auth_plugin = mysql_native_password像这样指定:

mysql.connector.connect(user=user, password=pw, host=host, database=db, auth_plugin='mysql_native_password')
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有办法强制mysql_native_password身份验证sqlalchemy.create_engine('mysql+mysqlconnector://...)

对此的任何建议将不胜感激......

Ilj*_*ilä 10

你可以使用connect_args

db_connection = sqlalchemy.create_engine(
    'mysql+mysqlconnector://user:pwd@hostname/db_name',
    connect_args={'auth_plugin': 'mysql_native_password'})
Run Code Online (Sandbox Code Playgroud)

或 URL查询

db_connection = sqlalchemy.create_engine(
    'mysql+mysqlconnector://user:pwd@hostname/db_name?auth_plugin=mysql_native_password')
Run Code Online (Sandbox Code Playgroud)