我对使用全局变量生成新数据库会话的概念不熟悉。我想将settings.py
文件导入manage.py
以调用使用.env
帮助程序库加载环境变量的方法dotenv
。settings.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
这应该如何改进?