python中使用sqlalchemy操作数据库遇到密码包含@的处理方法

使用sqlalchemy操作数据库的时候,遇到密码中包含@的时候会报错。因为它是通过@来链接IP地址的,遇到密码里有@就跟语法里的@混乱分不清了。编辑器就会报错。

比如下面这个例子:
用户名:XXXXX
密码:123@abc
IP地址:127.0.0.1
数据库端口:3308
数据库名:hehemall

con_info = 'mysql+pymysql://XXXXX:123@abc@127.0.0.1:3308/hehemall?charset=utf8'
# 语法:con_info ='mysql+pymysql://数据库用户:密码@IP地址:端口/数据库名?charset=utf8'

密码里有个@,语法中固定有一个@,会根据@进行拼接,这样就会导致运行到密码里的@的时候,代码就认为后边应该是IP地址了。但实际上那只是密码里的一个字符而已。

用上述方法连接数据库会报错:

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, 'Can\'t connect to MySQL server on \'abc"@127.0.0.1\' ([Errno 8] nodename nor servname provided, or not known)')

@符号导致的解析问题

如何解决?
使用python的urllib库中提供编码方法,代码如下

from urllib.parse import quote_plus as urlquote

host="127.0.0.1"
port=3308
user="XXXXX"
password="123@abc"
db_name="hehemall"
con_info = f'mysql+pymysql://{user}:{urlquote(password)}@{host}:{port}/{db_name}?charset=utf8'
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值