代码之家  ›  专栏  ›  技术社区  ›  Edamame

pymysql:隐藏我文件的凭据

  •  0
  • Edamame  · 技术社区  · 6 年前

    我有以下代码:

    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 . 可能放入另一个未提交到回购协议的文件中。

    我可以从另一个文件中读取字符串,但我想知道实现这一点的最佳实践或设计是什么?谢谢您!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kevin Dalias    6 年前

    是的,这是正确的主意。我喜欢基本配置文件的yaml,但是你可以使用任何格式。如果你使用yaml,它会像这样:

    1. 使用适当的读/写/执行权限在repo外部生成一个yaml文件。

      database_info:
          username: edamame
          password: mypassword
          host: 1.2.3.4
          port: 3306
          database: mydb
    2. 用PyYAML导入。

      import yaml
      with open('your/file/path/here/db_config.yaml', 'r') as infile:
          db_cfg = yaml.safe_load(infile)
    3. 访问变量并填充字符串(我通常将其包装在函数中):

      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']
          )
      )

    确保配置文件不在repo中,并且目录/文件权限正确。如果您正在构建一个web应用程序,另一个好的选择是环境变量。您可以使用Python的os库访问它们。