如何保存数据库配置而不在我的python文件上写入它们

时间:2017-05-02 09:57:39

标签: python python-3.x environment-variables

我有一个需要数据库凭据的python应用程序,代码看起来像这样。

def __init__ (self):
    self.conn = pymysql.connect("localhost","user","pass","db", use_unicode=True, charset="utf8")

正如您所看到的,我正在对敏感数据进行硬编码,当我将此代码推送到github时,我必须删除它,当我在服务器中运行它时,我必须修改它。所以,基本上我必须为prod / dev环境编辑这个文件。

我知道我们可以在Linux中将变量存储为database_name=foobar以及稍后echo $database_name来检索值,但是如何在我的python应用程序中使用它?

4 个答案:

答案 0 :(得分:1)

你的意思是环境变量?

您可以像这样访问它们:

import os
os.getenv('DATABASE_NAME')

答案 1 :(得分:1)

我在类似情况下一直在做的是保留一个单独的模块,其中包含所有配置设置,声明为"常量"变量,像这样:

#global_setup.py (separate module) 
MY_DB_SERVER = "localhost"
MY_DB_USER = "user"
MY_DB_PASS = "pass"
MY_DB_DB = "db"

然后,只要需要使用这些常量,就可以从该模块导入所有内容。您可以创建该文件的单独版本,以清除敏感信息,以便上传到公共Git服务器。

# main module
from global_setup import *

def __init__ (self):
    self.conn = pymysql.connect(MY_DB_SERVER, MY_DB_USER, MY_DB_PASS, MY_DB_DB, use_unicode=True, charset="utf8")

现在,请注意您的应用程序将部署在用户无法访问数据库本身的环境中,或者是否将通过非加密连接访问数据库。在这些情况下,您可能需要更多安全措施,例如通过SSL连接,或者让服务器端应用程序创建API。

答案 2 :(得分:1)

您可以使用envparse module。它允许您使用环境变量并将它们转换为适当的类型。

您可以为每个值添加变量,如数据库名称,数据库主机,或创建后处理器并将变量定义为URL:

from envparse import env  

db_host = env(DB_HOST, 'localhost')
db_port = env.int(DB_PORT, 3306)
db_user = env(DB_USER)
db_pass = env(DB_PASS)
db_name = env(DB_NAME)

conn = pymysql.connect(db_host,db_user,db_pass,db_name, use_unicode=True, charset="utf8")

答案 3 :(得分:0)

python中有一个模块ConfigParser来创建.ini文件并保存凭据并在需要时读取。

https://docs.python.org/3/library/configparser.html