首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当密码包含特殊字符时写入连接字符串

问当密码包含特殊字符时写入连接字符串
EN

Stack Overflow用户
提问于 2009-09-14 20:41:50
回答 2查看 52.1K关注 0票数 61

我正在为一个Python项目使用SQLalchemy,并且我希望有一个整洁的连接字符串来访问我的数据库。举个例子:

代码语言:javascript
复制
engine = create_engine('postgres://user:pass@host/database')

问题是,我的密码包含一系列特殊字符,当我尝试连接时,这些字符会被解释为分隔符。

我意识到我可以创建一个对象,然后像这样传递我的凭据:

代码语言:javascript
复制
drivername  = 'postgres',
username    = 'user', 
password    = 'pass', 
host        = 'host',
database    = 'database'

但如果可能的话,我更愿意使用连接字符串。

需要明确的是,有没有可能对我的连接字符串或连接字符串的密码部分进行编码,以便正确解析?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-14 21:26:51

对于URL组件字符串,反斜杠不是有效的转义字符。您需要对连接字符串的密码部分进行URL编码:

代码语言:javascript
复制
from urllib import quote_plus as urlquote
from sqlalchemy.engine import create_engine
engine = create_engine('postgres://user:%s@host/database' % urlquote('badpass'))

如果查看SQLAlchemy中用于表示数据库连接URL (在sqlalchemy/engine/url.py中)的类的实现,就会发现它们在将URL实例转换为字符串时使用相同的方法来转义密码,并且解析代码使用互补的urllib.unquote_plus函数从连接字符串中提取密码。

票数 103
EN

Stack Overflow用户

发布于 2021-07-06 18:06:50

在Python3.x中,您需要导入urllib.parse.quote:

urllib模块已被分成多个部分,并在Python3中重命名为urllib.request、urllib.parse和urllib.error。

当您尝试使用包含特殊字符序列的密码连接数据库MySQL时,如果您的python版本为Python3

user_name是您的数据库用户is

数据库是您的数据库名称

包含特殊字符的your_password密码

代码语言:javascript
复制
 from urllib.parse import quote  
 from sqlalchemy.engine import create_engine
 engine = create_engine('mysql+mysqlconnector://user_name:%s@localhost:3306/database' % quote('your_password'))
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1423804

复制
相关文章

相似问题

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