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

发布时间 2023-11-09 12:10:56作者: 南国之恋

欺骗性的oracle12514错误,这就有问题了,努力方向就不对了。。。

密码包含@的处理方法

使用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


作者:羋学僧
链接:https://www.jianshu.com/p/c386ece68085
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。