我不知道(并且找不到示例)连接字符串要传递给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包进行连接并且它可以工作,所以我认为我的问题不是网络或防火墙相关的。我在网上看到的所有例子都将上面的文档替换为连接字符串,因为(显然)他们不想公开他们的凭据,所以我很难找到模仿的东西。有什么想法吗?
答案 0 :(得分:1)
安装完mysql-connector后它工作了
pip install mysql-connector