Python中点引用运算符中的Access环境变量值
我有一个MongoDB数据库,其中包含以下详细信息: 数据库名称:Python中点引用运算符中的Access环境变量值,python,Python,我有一个MongoDB数据库,其中包含以下详细信息: 数据库名称:myFirstDB也存储在环境变量DB\u name 集合名称:myFirstCollection也存储在环境变量DB_COLLEC 我有以下python代码: db=get\u db()其中get\u db()返回pyMongo客户端连接 我想创建一个集合对象,如下所示: users=db.(os.environ.get('db\u NAME'))(os.environ.get('db\u colec')) 但这总是返回语法错误
myFirstDB
也存储在环境变量DB\u name
集合名称:
myFirstCollection
也存储在环境变量DB_COLLEC
我有以下python代码:
db=get\u db()
其中get\u db()返回pyMongo客户端连接
我想创建一个集合对象,如下所示:users=db.(os.environ.get('db\u NAME'))(os.environ.get('db\u colec'))
但这总是返回语法错误
使用env变量和引用运算符的替代方法是什么
编辑:更新以获取更多详细信息。
def get_db():
if 'db' not in g:
g.db = MongoClient(os.environ.get('DB_URI'), ssl_cert_reqs=ssl.CERT_NONE)
return g.db
我想在上面一行中使用环境变量。同一行在其他函数中重复。如果我想更改数据库名称或集合,我必须在多个地方对更改进行硬编码。因此env变量将尝试使用。我的代码如下所示
import os
import pymongo
def get_db():
return pymongo.MongoClient(os.getenv('DB_URI'))
def get_collection(db_name, coll_name):
db_connect = get_db()
return db_connect[db_name][coll_name]
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
### Below Line ###
users = get_collection(os.getenv('DB_NAME'), os.getenv('DB_COLLEC'))
### Above Line ###
error = None
if not username:
error = 'Username is required.'
elif not password:
error = 'Password is required.'
existing_user = users.find_one({'name' : request.form['username']})
// rest of the code
.
.
.
您可以使用内置函数。它返回对象<代码>对象<代码>的属性<代码>名称<代码>,如果向其传递一个可选的<代码>默认值<代码>值,则在<代码>对象<代码>没有属性<代码>名称<代码>的情况下,返回该值而不是引发<代码>属性错误<代码>。您标记的行可能如下所示:
users=getattr(getattr(db,os.environ.get('db\u NAME')),os.environ.get('db\u colec'))
或作为多用户:
db\u name=getattr(db,os.environ.get('db\u name'))
collect\u name=getattr(db\u name,os.environ.get('db\u COLLEC'))
而不是:
users = db.myFirstDBname.myFirstCollection
尝试:
这似乎不起作用:(好的..你的环境变量在哪里?错误是什么?这有点模糊。我得到“TypeError:name必须是str的一个实例”。将用更多信息更新问题。请在读取环境变量后尝试打印值…如果你没有提到,还可以输入你得到的错误是什么
users = db.myFirstDBname.myFirstCollection
users = db[myFirstDBname].myFirstCollection