Сбой аргументов пользовательских ключевых слов SQLAlchemy с TypeError: 'аргумент' является недопустимым аргументом ключевого слова для этой функции - PullRequest
0 голосов
/ 25 июня 2018

Мне нужно передать пользовательский аргумент в функцию create_engine SQLAlchemy, чтобы SSL авторизовал соединение с моей базой данных с AWS RDS. здесь , здесь и здесь было рекомендовано использовать connect_args SQLAlchemy для передачи моего пользовательского аргумента ключевого слова.Я попытался:

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 голосов
/ 25 июня 2018

Аргумент передается в восходящем направлении, то есть в ваш модуль mysql dbapi. Все, что делает sqlalchemy, это вызывает функцию connect из выбранного модуля.

Как вы можете видеть здесь https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html sslca не является допустимым параметром для функции connect - правильное имя параметра будет ssl_ca Я думаю?

Другими словами, вы должны выяснить, как делать то, что вы хотите сPython-MySQL напрямую, без использования sqlalchemy - sqlalchemy здесь не виноваткоторый использует его.

SQLAlchemy не является базой данных, он ни к чему не подключается.Это всего лишь слой, вы должны предоставить модуль базы данных, чтобы использовать его для подключения к базам данных.

...