- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 python Mongoengine 我正在尝试创建数据库并将文档添加到不同的数据库。这是我正在尝试的方式:
from mongoengine import *
class MongoDataAccessObject():
# method to connect to the database and initialize the tables etc.
def __init__(self, my_env, helperObj):
print "initializing db for the environment ", my_env
self.con = None
self.dbName = my_env
self.helper_obj = helperObj
try:
self.con = connect(db=self.dbName)
except Exception as e:
print e
def addRecord(self, document_object):
document_object.save()
现在,我在创建上述类的对象时传递了我想要创建的不同数据库的名称,并像这样添加文档:
for my_env in list_of_envs:
dao = MongoDataAccessObject(my_env, helper_object)
dao.addRecord(myDocument)
现在这里有2个问题:
好的,做了更多的研究,发现了这个: https://github.com/MongoEngine/mongoengine/issues/605
在 iptyhon 中这样试过:
from mongoengine import *
import datetime
class Page(Document):
title = StringField(max_length=200, required=True)
date_modified = DateTimeField(default=datetime.datetime.now)
def switch(model, db):
model._meta['db_alias'] = db
# must set _collection to none so it is re-evaluated
model._collection = None
return model
register_connection('default', name='testing')
register_connection('mycon', name='db1')
page = Page(title="Test Page")
page = switch(page, 'mycon')
page.save()
这有效并创建了一个名为 db1 的数据库并将文档存储在那里。
现在我再做一次:
register_connection('mycon2', name='db2')
page = Page(title="Test Page")
page = switch(page, 'mycon2')
page.save()
与我的预期相反,这次没有创建 db2(从 mongo 客户端和 Robomongo 检查),但是文档已成功保存。想知道文档到底保存在哪里??
因此,重复上述练习并进行如下小改动:
register_connection('mycon2', name='db2')
page = Page(title="Test Page")
page = switch(page, 'mycon2')
x = page.save()
# did a dir(x) and found that there is _get_db, so tried it out as below
x._get_db()
输出是:
Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary()), u'db2')
我猜这意味着文档被保存在一个名为 db2 的数据库中。但是这个 db2 到底在哪里????为什么我不能通过 mongo 客户端甚至 Robomongo 等看到它?
最佳答案
最后,我能找到实现上述目标的唯一方法是通过 MongoEngine 提供的上下文管理器 with 语句,这在此处也有详细记录:http://docs.mongoengine.org/guide/connecting.html#switch-database
我在上面的代码中的做法是这样的:
在第一次调用数据库时,需要创建一个默认的数据库,它应该有一个默认的别名。只有这样才能创建另一个别名,否则 Mongoengine 会抛出一个错误,指出没有找到默认数据库。
所以要做到这一点,当第一个数据库对象被创建时,一个 False 标志被发送到 __init__of MongoDataAccessObject为此,MongoDataAccessObject 也更改为如下内容:
class MongoDataAccessObject():
# method to connect to the database and initialize the tables etc.
def __init__(self, my_env, helperObj, is_default_db_set):
print "initializing db for the environment ", my_env
self.con = None
self.dbName = my_env
self.helper_obj = helperObj
self.db_alias = my_env
self.is_default_db_set = is_default_db_set
try:
# all of this part with the is_default_db_set and register_connection() is needed because MongoEngine does not
# provide a simple way of changing dbs or switching db connections. The only way to do it is through the switch_db()
# context manager they provide (which has been used in the addRecord() below)
if not self.is_default_db_set:
self.con = connect(db=self.dbName, alias='default')
else:
# register_connection(alias_name, db_name)
register_connection(self.db_alias, self.dbName)
except Exception as e:
print e
并且 addRecord() 也被修改为:
def addRecord(self, document_object):
with switch_db(model_object, self.db_alias) as model_object:
document_object = model_object()
document_object.save()
上面这部分:
for my_env in list_of_envs:
dao = MongoDataAccessObject(my_env, helper_object)
dao.addRecord(myDocument)
也修改为:
for my_env in list_of_envs:
dao = MongoDataAccessObject(my_env,helper_object,mongo_default_db_flag)
dao.addRecord(myDocument)
这似乎适合我。
关于python - 连接未创建到 mongoengine 中的新 dbname,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626773/
有什么区别: USE SchoolDB; SELECT * FROM StudentTable; 对比 SELECT * FROM SchoolDB.dbo.StudentTable; 这两者各有什
我想要什么: 我想建立一个自动部署管道-我的计划如下: 我创建了两个.war文件,使用gradle构建脚本将它们称为prod.war和test.war,并将它们部署到我的tomcat服务器。 我的问题
我正在使用 @DbName() 来获取笔记数据库的名称和文件路径。不幸的是,文件路径和名称作为一个不带斜杠的字符串返回。例如,如果文件路径为“Dir1/Dir2/dbname.nsf”,则返回为“Di
想象一下,当您连接到服务器时,这是您的数据库结构。大多数时候,您将拥有相同的表,但值不同。如果我的表的某个值(即 Tbl1 ColumnName Col1)的值等于“已接受”,我想查询数据库名称。 D
执行以下查询时是否可以获得自定义结果: show table status from dbname 我以这种方式定制了“show processlist”查询: SELECT * FROM INFOR
我的 Entity Framework 发送插入查询如下 insert into students ( `studentCode`, `surname`) VALUES ('djs', 'andy')
我尝试使用以下查询恢复数据库: ALTER DATABASE [DatabaseName] SET Single_User WITH Rollback Immediate GO RESTORE DAT
使用 python Mongoengine 我正在尝试创建数据库并将文档添加到不同的数据库。这是我正在尝试的方式: from mongoengine import * class MongoDataA
我正在尝试将我的应用程序连接到 mongodb,我从 mongodb atlas 得到了一个连接字符串,要求我替换用户名和密码,我明白了,但它也说用数据库名称替换 dbname ......我不记得我
我在使用 SQL Server 2008 R2 时遇到问题。 我的计算机最近出现了问题,因此我必须重新启动 Windows,并且必须将一个用户的权限授予另一用户(使用属性中的安全功能)。不过,在最初授
对于我在 XPage 应用程序中使用的一些 SSJS 代码,我有一些 @DbLookup 公式。到目前为止,我一直使用 @DbName() 作为 @DbLookup 公式的第一个参数。如果我将 @Db
我创建了一个 python 文件 app.py 并包含了连接到我在 postgresql 中创建的数据库的代码,如下所示:- import psycopg2 conn = psycopg2.conne
我正在使用 asp.net MVC 和 mysql 数据库。我安装了 MySql.Data v8.0.16.0 和 MySql.Data.EntityFramework v8.0.16.0。 在 we
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 9 年前。 Improve
注意: undefined variable :dbname 找不到用户名 我无法从 mysql 数据库获取用户名和密码,也许你知道问题出在哪? ...........................
我有一个使用 spring data/jpa 的 SpringBoot 2.0.1.RELEASE 应用程序 org.springframework.boot spring-boot
我一直在使用 DataStax,我即将推送到我的存储库,拥有 secure-connect-DBNANE.zip 安全吗?在 repo ?我想是这样,因为需要进行查询,但我不确定。 最佳答案 Data
尝试连接到在 Amazon RDS 上运行 PostgreSQL 数据库引擎的数据库实例时。 我已经检查了环境变量并且值设置正确。 但是,当我运行 npm run dev 时遇到以下错误 (node:
我的 Delphi 应用程序通过 BDE 连接到 SQL Server 数据库。 在此过程中,我的应用程序查询 SP_Who存储过程来获取 DbName 列的值。但现在我想通过 ODBC 将我的应用程
也许我错过了什么。但是为什么没有这个功能呢? 根据文档,它应该是: https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html 版本
我是一名优秀的程序员,十分优秀!