Python解析DB URI
数据库配置信息一般包含数据库类型、数据库服务器地址、端口号、用户名、密码、要链接的数据库,以及一些选项等,例如
通常我们需要配置多个变量来完成整个配置,如
db_type = 'mysql'
host = 'localhost'
port = 3306
user = 'root'
password = 'passw0rd'
db = 'testdb'
charset = 'utf8'
# ...
也可以按URI格式通过一个字符串给出,例如
mysql://root:passw0rd@localhost:3306/testdb?charset=utf8
postgres://postgress@localhost/testdb?sslmode=false
其中,密码、端口号、数据库,以及选项参数可以为空
使用正则解析DB URI#
不支持解析
?chaset=utf8
import re
PATTEN = r'(?P<db_type>\w+?)://(?P<user>\w+?):(?P<password>\w+?)@(?P<host>.*?):(?P<port>\d+?)/(?P<db>\w+)'
db_uri = 'mysql://root:passw0rd@localhost:3306/testdb'
r = re.match(PATTEN, db_uri)
if r:
db_type = r.group('db_type')
user = r.group('user')
password = r.group('password') or None
host = r.group('host')
port = int(r.group('port') or 3306)
db = r.group('db') or None
print(host, port, user, password, db)
使用urlparse解析DB URI#
from urllib.parse import urlparse, parse_qs
db_uri = 'mysql://root:passw0rd@localhost:3306/testdb?charset=utf8'
parsed_uri = urlparse(db_uri)
db_type = parsed_uri.scheme
user = parsed_uri.username
password = parsed_uri.password
host = parsed_uri.hostname
port = int(parsed_uri.port or 3306)
db = parsed_uri.path.lstrip('/')
charset = 'utf8'
if parsed_uri.query is not None:
charset = parse_qs(parsed_uri.query).get('charset', [None])[0]
print(host, port, user, password, db, charset)
作者:韩志超
出处:https://www.cnblogs.com/superhin/p/18375667
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
如有问题,请微信联系 superz-han,并发送原文链接。
/* 请我喝杯咖啡吧 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2021-08-23 Pytest自定义测试报告