我需要将自定义参数传递给SQLAlchemy的create_engine
函数,以便SSL授权我与AWS RDS的数据库连接。 here,here和here建议使用SQLAlchemy的connect_args
传递自定义关键字参数。我尝试过:
engine = create_engine(os.environ['DB_URI'], connect_args={'ssla':'amazon-rds-ca-cert.pem'})
但是,我遇到以下TypeError,这与其他张贴者说的connect_args
为他们解决的错误相同:
TypeError: 'ssla' is an invalid keyword argument for this function
看来我做得很对。我还尝试在连接字符串中传递关键字参数:
mysql://name:password@localhost/test?sslca=amazon-rds-ca-cert.pem
并更改关键字参数的名称以使其与sqlalchemy docs中的示例完全匹配:
db = create_engine('mysql://name:password@localhost/test', connect_args = {'argument2':'bar'})
但是,仍然没有运气。似乎该错误是由MySQLdb在错误消息中引发的,所以那里可能是错误?
File "/Users/tobyweed/workspace/ftm/live-event-market/server/serverenv/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 411, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/Users/tobyweed/workspace/ftm/live-event-market/server/serverenv/lib/python2.7/site-packages/MySQLdb/__init__.py", line 86, in Connect
return Connection(*args, **kwargs)
File "/Users/tobyweed/workspace/ftm/live-event-market/server/serverenv/lib/python2.7/site-packages/MySQLdb/connections.py", line 204, in __init__
super(Connection, self).__init__(*args, **kwargs2)
TypeError: 'ssla' is an invalid keyword argument for this function
但是,我没有安装MySQLdb,因此它必须是正在使用它的SQLAlchemy。我拥有最新版本的SQLAlchemy(1.2.8),所以就不能了。
请帮助!
答案 0 :(得分:2)
该参数正在向上游传递,即传递给您的mysql dbapi模块-sqlalchemy所做的所有工作就是从所选模块中调用connect
函数。
正如您在此处看到的,https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html sslca
不是connect
函数的有效参数-我认为正确的参数名称为ssl_ca
?
换句话说,您必须直接使用python-mysql来查找所需的方法,而根本不使用sqlalchemy-sqlalchemy并不是罪魁祸首
你也说
但是,我没有安装MySQLdb,因此必须是正在使用它的SQLAlchemy。
SQLAlchemy不是数据库,它不连接任何东西。它只是一个层,您必须提供一个数据库模块才能用于连接数据库。