正确的连接字符串传递给sqlalchemy create_engine()for mysql AWS RDS

时间:2017-02-09 21:08:52

标签: python mysql python-3.x sqlalchemy amazon-rds

我不知道(并且找不到示例)连接字符串要传递给sqlalchemy的create_engine(),它允许我连接到Amazon Web Service RDS上的mysql数据库。文档很简单,但我正在绊倒。 文件国:

mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

让我的用户说:hellothere
密码是:Comp&lt;'/“/&gt; {}]:[”licated
主机是:sandbox.cbaspyqqzfab.us-west-2.rds.amazonaws.com
港口是:3306
dbname是:nameofdatabase

这有什么问题?

conn_str = 'mysql+mysqldb://<hellothere>:<Comp<'/"/>{}]:["licated>@<sandbox.cbaspyqqzfab.us-west-2.rds.amazonaws.com>[:<3306>]/<nameofdatabase>'
engine = sqlalchemy.create_engine(conn_str, echo=True)

错误消息

  

Traceback(最近一次调用最后一次):文件   main()文件中的“C:/ GitHub / blah / data / init .py”,第16行   主要的init_db()文件中的“C:/ GitHub / blah / data / init .py”,第12行   init_db中的“C:/ GitHub / blah / data / init .py”,第8行   DbSessionFactory.global_init(db_file = dbfilepath)文件   global_init engine =“C:\ GitHub \ blah \ data \ dbsession.py”,第25行   sqlalchemy.create_engine(conn_str,echo = True)文件   “C:\ Python的\ Anaconda3 \ ENVS \ CE \ LIB \站点包\ SQLAlchemy的\ engine__init __ PY。”   第387行,在create_engine中返回strategy.create(* args,** kwargs)   文件   “C:\ Python的\ Anaconda3 \ ENVS \ CE \ LIB \站点包\ SQLAlchemy的\发动机\ strategies.py”   第80行,在create dbapi = dialect_cls.dbapi(** dbapi_args)文件中   “C:\ Python的\ Anaconda3 \ ENVS \ CE \ LIB \站点包\ SQLAlchemy的\方言\ mysql的\ mysqldb.py”   第110行,在dbapi中返回 import ('MySQLdb')ModuleNotFoundError:   没有名为'MySQLdb'的模块

如果我指定一个本地文件并使用sqlite,它可以正常工作,所以我认为其余的代码都没问题。

conn_str = 'sqlite:///' + 'dbfile.sqlite'

我尝试了很多不同的方式,有和没有&lt;&gt;,但我得到了同样的错误。我不知道我是否需要逃避密码中的特殊字符,或者问题是否更为根本,而且我不正确地连接到RDS。我使用R中的RMySQL包进行连接并且它可以工作,所以我认为我的问题不是网络或防火墙相关的。我在网上看到的所有例子都将上面的文档替换为连接字符串,因为(显然)他们不想公开他们的凭据,所以我很难找到模仿的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

安装完mysql-connector后它工作了 pip install mysql-connector