Python 3.x pymysql:隐藏我的文件的凭据
我有以下代码:Python 3.x pymysql:隐藏我的文件的凭据,python-3.x,pymysql,Python 3.x,Pymysql,我有以下代码: from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://edamame:mypassword@1.2.3.4:3306/mydb') 我想隐藏部分:edamame:mypassword@1.2.3.4:3306/mydb。可能放入另一个未提交回购协议的文件中 我可以从另一个文件中读取字符串,但我想知道实现这一点的更好实践或设计是什么?谢谢大家! 是的,这是正确的想法。我喜欢yam
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://edamame:mypassword@1.2.3.4:3306/mydb')
我想隐藏部分:edamame:mypassword@1.2.3.4:3306/mydb
。可能放入另一个未提交回购协议的文件中
我可以从另一个文件中读取字符串,但我想知道实现这一点的更好实践或设计是什么?谢谢大家! 是的,这是正确的想法。我喜欢yaml的基本配置文件,但你可以使用任何你喜欢的格式。如果您使用yaml,它将如下所示:
确保您的配置文件不在repo中,并且目录/文件权限正确。如果您正在构建web应用程序,另一个好的选择是环境变量。您可以使用Python的os库访问这些文件 PyYAML的
yaml.load()
被证明是不安全的。对于该YAML,没有理由不使用YAML.safe\u load()
。使用过时的PyYAML有什么特别的原因吗?PyYAML是一个仍然不支持YAML 1.2标准的库(一个9年前发布的标准)?你不应该在你的帖子中放“编辑2:”之类的东西,因为这些信息与你答案的新浏览者无关。总是有编辑历史记录和评论(不再相关时可以删除)。感谢您的反馈,Anthon。您是对的,safe_load()是更好的选择(更新)。PyYAML仍在维护中,YAML 1.1对于这个用例来说已经足够了-您是否考虑了1.1的限制?
engine = create_engine(
'mysql+pymysql://{}:{}@{}:{}/{}'.format(
db_cfg['database_info']['username'],
db_cfg['database_info']['mypassword'],
db_cfg['database_info']['host'],
db_cfg['database_info']['port'],
db_cfg['database_info']['database']
)
)