Как создать словарь из переменных среды ОС? - PullRequest
4 голосов
/ 30 октября 2019

В операционной системе заданы переменные окружения (macos):

MYSQL_HOST="127.0.0.1"
MYSQL_DATABASE="invoice"
MYSQL_UID="dude"
MYSQL_PWD="pass1234"

Я хотел бы создать список с именем db_config так, чтобы конечный результат выглядел следующим образом:

db_config = {'host':"127.0.0.1", 'database':"invoice", 'user':"dude",
             'password':"pass1234"}

(Обратите внимание, что имена переменных среды отличаются от ключей в db_config. db_config будет использоваться для передачи учетных данных подключения к базе данных, и ключи должны быть теми, которые перечислены в приведенном выше db_config.)

Я могу "вручную" установить db_config, используя:

db_config={'host':os.environ['MYSQL_HOST'], 'database':os.environ['MYSQL_DATABASE'],
           'user':os.environ['MYSQL_UID'], 'password':os.environ['MYSQL_PWD']}

... но, похоже, должен быть более чистый, более питонский способ сделать это, но яне могу понять это.

Ответы [ 3 ]

5 голосов
/ 30 октября 2019
config = {
    'host': 'MYSQL_HOST',
    'database': 'MYSQL_DATABASE',
    'user': 'MYSQL_UID',
    'password': 'MYSQL_PWD'
}
db_config = {k: os.environ.get(v) for k, v in config.items()}

В зависимости от того, как вы хотите относиться к предметам, которых нет в os.environ, вы можете использовать условное понимание диктов, чтобы игнорировать их.

db_config = {k: os.environ.get(v) for k, v in config.items()
             if v in os.environ}
1 голос
/ 31 октября 2019

Вы можете переименовать old_name и new_name в коде ниже;и если вы уверены, что переменные окружения будут присутствовать или требуют, чтобы они были доступны для вашего кода, чтобы работать правильно, вы можете удалить раздел if словаря, показанного ниже:

import os

transformations = (
    ('MYSQL_HOST', 'host'),
    ('MYSQL_DATABASE', 'database'),
    ('MYSQL_UID', 'user'),
    ('MYSQL_PWD', 'password')
)

db_config = {
    new_name: os.environ[old_name]
    for old_name, new_name in transformations
    if old_name in os.environ
}
0 голосов
/ 30 октября 2019

все переменные ENV, связанные с MYSQL, в одном диктовке

import os

keys = dict(os.environ).keys()

dic = {}
for key in keys:
    if 'MYSQL_' in key:
        dic.update({key.split('MYSQL_')[1]:os.environ.get(key)})

print(dic)      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...