Python中使用sqlalchemy操作数据库遇到密码包含@的处理方法
欺骗性的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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。