首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于密码中的"@“,无法用Python连接mysql DB

由于密码中的"@“,无法用Python连接mysql DB
EN

Stack Overflow用户
提问于 2022-03-08 16:13:39
回答 2查看 597关注 0票数 1

我正试着把熊猫和MySQL数据库联系起来,写到表格上。我的虚拟数据库凭据是:

代码语言:javascript
复制
db_name="ai_db_dev"
db_user="ai_db_user_dev"
db_pwd="abassc@xasas12yz"
db_host="db.rds.amazonaws.com"
db_client="mysql"

我使用以下虚假SSL标志连接到数据库:

代码语言:javascript
复制
db_connection_str=db_client+"://"+db_user+":"+db_pwd+"@"+db_host+"/"+db_name
connect_args={'ssl':{'fake_flag_to_enable_tls': True},
         'port': 3306}
db_connection = create_engine(db_connection_str,connect_args= connect_args)

我试图在表格中插入分贝,如下所示:

代码语言:javascript
复制
df.to_sql(con=db_connection, name='ai_table', if_exists='append', index= False)

但是由于密码中的“@”,它没有正确地拾取主机,因此我无法连接到DB。任何帮助解决这一问题将受到高度赞赏!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-08 20:35:43

SQLAlchemy有一个内置的URL.create()方法,它将为您构建一个正确转义的URL:

代码语言:javascript
复制
import sqlalchemy as sa

db_name="ai_db_dev"
db_user="ai_db_user_dev"
db_pwd="abassc@xasas12yz"
db_host="db.rds.amazonaws.com"
db_client="mysql"

connection_url = sa.engine.URL.create(
    drivername=db_client,
    username=db_user,
    password=db_pwd,
    host=db_host,
    database=db_name
)
print(connection_url)
# mysql://ai_db_user_dev:abassc%40xasas12yz@db.rds.amazonaws.com/ai_db_dev
票数 2
EN

Stack Overflow用户

发布于 2022-03-08 16:25:55

如果你用简单的引号括住你的用户名和密码?

代码语言:javascript
复制
db_connection_str = f"{db_client}://'{db_user}':'{db_pwd}'@{db_host}/{db_name}"
代码语言:javascript
复制
>>> db_connection_str
"mysql://'ai_db_user_dev':'abassc@xasas12yz'@db.rds.amazonaws.com/ai_db_dev"

尝试2

代码语言:javascript
复制
from urllib.parse import quote

db_connection_str = f"{db_client}://{db_user}:{quote(db_pwd)}@{db_host}/{db_name}"

输出:

代码语言:javascript
复制
>>> db_connection_str
"mysql://'ai_db_user_dev':'abassc%40xasas12yz'@db.rds.amazonaws.com/ai_db_dev"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71398129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档