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

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

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

con_info = 'mysql+pymysql://XXXXX:123@[email protected]: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'

猜你喜欢

转载自blog.csdn.net/xkukeer/article/details/127806164