正确的连接字符串传递给 sqlalchemy create_engine() for mysql AWS RDS
Proper connection string to pass to sqlalchemy create_engine() for mysql AWS RDS
我不知道(也找不到示例)要传递给 sqlalchemy
的 create_engine()
的连接字符串,它允许我连接到 mysql
数据库在 Amazon Web Service RDS
上。文档很简单,但我被绊倒了。
文档状态:
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
假设:
- 我的用户是:
hellothere
- 密码是:
Comp<'/"/>{}]:["licated
- 主机是:
sandbox.cbaspyqqzfab.us-west-2.rds.amazonaws.com
- 端口是:
3306
- 数据库名称是:
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 (most recent call last): File
"C:/GitHub/blah/data/__init__.py", line 16, in <module> main() File
"C:/GitHub/blah/data/__init__.py", line 12, in main init_db() File
"C:/GitHub/blah/data/__init__.py", line 8, in init_db
DbSessionFactory.global_init(db_file=dbfilepath) File
"C:\GitHub\blah\data\dbsession.py", line 25, in global_init engine =
sqlalchemy.create_engine(conn_str, echo=True) File
"C:\Python\Anaconda3\envs\CE\lib\site-packages\sqlalchemy\engine\__init__.py",
line 387, in create_engine return strategy.create(*args, **kwargs)
File
"C:\Python\Anaconda3\envs\CE\lib\site-packages\sqlalchemy\engine\strategies.py",
line 80, in create dbapi = dialect_cls.dbapi(**dbapi_args) File
"C:\Python\Anaconda3\envs\CE\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.py",
line 110, in dbapi return __import__('MySQLdb') ModuleNotFoundError:
No module named 'MySQLdb'
如果我指定一个本地文件并使用 sqlite
它工作正常,所以我认为其余代码没问题。
conn_str = 'sqlite:///' + 'dbfile.sqlite'
我尝试了很多不同的方法,有和没有 <>
,但我得到了同样的错误。我不知道我是否需要对密码中的特殊字符进行转义,或者问题是否更根本并且我未正确连接到 RDS。我使用 R 中的 RMySQL
包进行连接并且它有效,所以我认为我的问题与网络或防火墙无关。我在网上看到的所有示例都用上面的文档代替了连接字符串,因为(显然)他们不想公开他们的凭据,所以我很难找到可以模仿的东西。有什么想法吗?
安装 mysql-connector
后有效
pip install mysql-connector
我不知道(也找不到示例)要传递给 sqlalchemy
的 create_engine()
的连接字符串,它允许我连接到 mysql
数据库在 Amazon Web Service RDS
上。文档很简单,但我被绊倒了。
文档状态:
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
假设:
- 我的用户是:
hellothere
- 密码是:
Comp<'/"/>{}]:["licated
- 主机是:
sandbox.cbaspyqqzfab.us-west-2.rds.amazonaws.com
- 端口是:
3306
- 数据库名称是:
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 (most recent call last): File
"C:/GitHub/blah/data/__init__.py", line 16, in <module> main() File
"C:/GitHub/blah/data/__init__.py", line 12, in main init_db() File
"C:/GitHub/blah/data/__init__.py", line 8, in init_db
DbSessionFactory.global_init(db_file=dbfilepath) File
"C:\GitHub\blah\data\dbsession.py", line 25, in global_init engine =
sqlalchemy.create_engine(conn_str, echo=True) File
"C:\Python\Anaconda3\envs\CE\lib\site-packages\sqlalchemy\engine\__init__.py",
line 387, in create_engine return strategy.create(*args, **kwargs)
File
"C:\Python\Anaconda3\envs\CE\lib\site-packages\sqlalchemy\engine\strategies.py",
line 80, in create dbapi = dialect_cls.dbapi(**dbapi_args) File
"C:\Python\Anaconda3\envs\CE\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.py",
line 110, in dbapi return __import__('MySQLdb') ModuleNotFoundError:
No module named 'MySQLdb'
如果我指定一个本地文件并使用 sqlite
它工作正常,所以我认为其余代码没问题。
conn_str = 'sqlite:///' + 'dbfile.sqlite'
我尝试了很多不同的方法,有和没有 <>
,但我得到了同样的错误。我不知道我是否需要对密码中的特殊字符进行转义,或者问题是否更根本并且我未正确连接到 RDS。我使用 R 中的 RMySQL
包进行连接并且它有效,所以我认为我的问题与网络或防火墙无关。我在网上看到的所有示例都用上面的文档代替了连接字符串,因为(显然)他们不想公开他们的凭据,所以我很难找到可以模仿的东西。有什么想法吗?
安装 mysql-connector
后有效
pip install mysql-connector