【发布时间】:2019-07-01 06:23:43
【问题描述】:
我使用 mongoDB 作为我的数据库,我正在开发 django 项目并使用 mongoengine 连接数据库。我的问题是如果我在settings.py 中的默认数据库是DB1 并且我想删除存在于DB2 中的集合的所有记录,那么我该怎么做。
settings.py
import mongoengine
mongoengine.connect(
db= "DB1",
host='localhost',
)
models.py
class Resources(Document):
field1= fields.StringField(max_length=20)
field2 = fields.StringField(max_length=70)
field3 = fields.StringField(max_length=70)
field4 = fields.DictField()
meta = {'collection': 'resources', 'allow_inheritance': False, '_target_db': 'DB2'}
python 外壳
from .models import Resources
import mongoengine
mongoengine.connect('DB2', alias='ces')
ob = Resources()
ob.switch_db('ces')
ob.field1 = value
ob.field2 = value
ob.field3 = value
ob.save()
现在我在DB2 中收集了resources 并且它有一些记录,我尝试过Resources.objects.all().delete() 但它没有从DB2 中删除记录,而是从DB1 中删除记录,这是默认设置数据库。
【问题讨论】:
-
您是否在 settings.py 文件中定义了 DB2?这很有趣,因为您在 settings.py 文件中只定义了 DB1,并且您对
Resources的所有操作都将发生在 DB1 上。 -
不,我没有,如何在
settings.py中定义DB2? -
Django 本身不支持 mongoDB,所以你不能使用内置的 django ORM。您是否使用第三方库进行 django mongodb 集成?
-
在您的情况下,我猜您的 Django 模型中有具有相同名称(资源)的模型,当您使用 Resources.objects.all().delete() 时,您实际上是在调用 django 模型而不是mongoengine 文档。你能告诉我们你调用 delete() 方法的代码吗?
-
是的,我正在使用
djongo将 django 与 mongodb 连接起来。
标签: django pymongo mongoengine