SQLAlchemy自定义关键字参数以TypeError失败:'argument'是该函数的无效关键字参数

时间:2018-06-25 20:08:27

标签: python sqlalchemy mysql-python

我需要将自定义参数传递给SQLAlchemy的create_engine函数,以便SSL授权我与AWS RDS的数据库连接。 hereherehere建议使用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),所以就不能了。

请帮助!

1 个答案:

答案 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不是数据库,它不连接任何东西。它只是一个层,您必须提供一个数据库模块才能用于连接数据库。