1

我对使用全局变量生成新数据库会话的概念不熟悉。我想将settings.py文件导入manage.py以调用使用.env帮助程序库加载环境变量的方法dotenvsettings.py但是,由于在导入 manage.py时变量尚未初始化(.env文件名尚未从中读取sys.argv),因此引擎构造行不能保持“显而易见”(未缩进)。我想知道settings.py这样一个全局变量是否合适?我习惯settings.py只包含基本类型的字典,没有对象或类。
现在init_db_globs看起来是这样的。

# set the default db .env file name
def init_db_globs(db_name='db', env_file_name='.env'):
    # refer to global vars
    global engine, session
    # connection string template
    template_uri = 'postgresql://{}:{}@{}:{}/{}'
    # load env vars
    load_dotenv(env_file_name)
    # load database parameters from env vars
    dbs = {
        'db': {
            # 'var': os.getenv('DB_VAR'),
        },
        'db_test': {
            # 'var': os.getenv('DB_VAR_TEST'),
        }
    }
    uri = template_uri.format(db['user'],db['password'],db['host'],db['port'],db['name'])
    engine = create_engine(uri, params_list)
    # create a configured "Session" class
    Session = orm.sessionmaker(bind=engine)
    # init global session
    session = Session()

# create global vars
session = None
engine = None

这应该如何改进?

4

0 回答 0