我有一个需要数据库凭据的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应用程序中使用它?
答案 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文件并保存凭据并在需要时读取。