Python pandas to_sql sqlalchemy与安全传输的连接

Python pandas to_sql sqlalchemy与安全传输的连接,python,python-3.x,pandas,ssl,sqlalchemy,Python,Python 3.x,Pandas,Ssl,Sqlalchemy,我试图将数据发送到服务器上的mysql数据库,该服务器具有--require_secure_transport=on 当我试图用以下代码连接到它时 import pandas as pd import pymysql from sqlalchemy import create_engine connect_string = 'mysql+pymysql://{}:{}@{}/{}'.format(user,pw,host,database) connector = create_engine(

我试图将数据发送到服务器上的mysql数据库,该服务器具有--require_secure_transport=on

当我试图用以下代码连接到它时

import pandas as pd
import pymysql
from sqlalchemy import create_engine

connect_string = 'mysql+pymysql://{}:{}@{}/{}'.format(user,pw,host,database)
connector = create_engine(connect_string)   
df = pd.read_csv('iris.data')
df.to_sql('iris',connector,if_exists='replace',index_label='id')
我得到以下错误

InternalError: (pymysql.err.InternalError) (3159, 'Connections using insecure transport are prohibited while --require_secure_transport=ON.') (Background on this error at: http://sqlalche.me/e/2j85)
    ca = sslp.get('ca')

AttributeError: 'str' object has no attribute 'get'
我已经搜索了如何使连接器使用secure_transport的选项,但没有找到任何有效的选项

我发现的一个解决方案要求在connect\u字符串的末尾添加?ssl=true

connect_string = 'mysql+pymysql://{}:{}@{}/{}?ssl=true'.format(user,pw,host,database)
但这导致了以下错误

InternalError: (pymysql.err.InternalError) (3159, 'Connections using insecure transport are prohibited while --require_secure_transport=ON.') (Background on this error at: http://sqlalche.me/e/2j85)
    ca = sslp.get('ca')

AttributeError: 'str' object has no attribute 'get'
我能够以这种方式仅使用pymysql连接到数据库

ssl={'ssl': {'key': 'ssl/client-key.pem','cert': 'ssl/client-cert.pem','ca': 'ssl/ca-cert.pem'}}
con = pymysql.Connect(host,user,pw,database,ssl=ssl)
cur = con.cursor()
cur.execute("show tables;")
但我找不到一种使用sqlalchemy连接器实现这一点的方法。 有人对如何使这项工作起作用有一些建议吗


“问候”

在多看了一眼之后找到了解决方案

Mysql通常被设置为在未提供ca文件和密钥的情况下动态生成ca文件和密钥,但问题是向pymysql发送正确的标志,这样它就不会去寻找本地ca文件

在这里找到了这个:

您只需传递一个具有“ssl”密钥的字典,该字典具有一个值为True的密钥。为了清晰起见,我使用了关键字“fake_flag_to_enable_tls”,但它可以是看起来的任何东西

connect_args={'ssl':{'fake_flag_to_enable_tls': True}}
connect_string = 'mysql+pymysql://{}:{}@{}/{}'.format(user,pw,host,database)
connector = create_engine(connect_string,connect_args=connect_args) 
df = pd.read_csv('iris.data')
df.to_sql('iris',connector,if_exists='replace',index_label='id')
希望其他人觉得这个有用