美文网首页
Python中使用sqlalchemy操作数据库遇到密码包含@的

Python中使用sqlalchemy操作数据库遇到密码包含@的

作者: 羋学僧 | 来源:发表于2023-02-08 20:53 被阅读0次

密码包含@的处理方法

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

比如下面这个例子:

用户名:XXXXX
密码:123@abc
IP地址:127.0.0.1
数据库端口:3306
数据库名:test_database

con_info = 'mysql+pymysql://XXXXX:123@abc@127.0.0.1:3306/test_database?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=3306
user="XXXXX"
password="123@abc"
db_name="test_database"
con_info = f'mysql+pymysql://{user}:{urlquote(password)}@{host}:{port}/{db_name}?charset=utf8'

相关文章

网友评论

      本文标题:Python中使用sqlalchemy操作数据库遇到密码包含@的

      本文链接:https://www.haomeiwen.com/subject/zktckdtx.html