我遇到让mongodb使用Django的问题,我的设置是Mac OS X 10.7。我按照这里提供的教程:http://django-mongodb.org/topics/setup.html。我试过virtualenv和没有(这是我第一次安装django所以我不应该有任何冲突)。
在settings.py中
DATABASES = {
'default' : {
'ENGINE' : 'django_mongodb_engine',
'NAME' : 'my_database'
}
}
在firstapp.models.py
from django.db import models
from djangotoolbox.fields import ListField
class Post(models.Model):
title = models.CharField()
text = models.TextField()
tags = ListField()
comments = ListField()
在我的shell(python manage.py shell)中,我尝试运行:
from mydjango.firstapp.models import Post
post = Post.objects.create();
但我一直得到以下内容: DatabaseError:无法连接到localhost:27017:[Errno 61]拒绝连接(full traceback)
如果我将settings.py切换为以下内容:
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'my_database',
'USER': '',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '27017',
'SUPPORTS_TRANSACTIONS': False,
},
}
我在shell中收到此错误:不正确配置:port必须是int的实例
答案 0 :(得分:3)
您是否单独设置了MongoDB?您链接的方法似乎没有超过MongoDB配置。它假定数据库已在运行。在任何情况下,MongoDB似乎都失败了,或者至少在其他地方倾听。
最后一个错误(“... int的实例”)只是因为您在配置字典中指定了'27017'
(字符串)而不是27017
。但即便如此,它应该等同于第一个更简单的配置。
答案 1 :(得分:0)
如果MongoDB正在运行但是在尝试从另一台计算机连接时仍然出现此错误,则可能是由于在MongoDB服务器上运行了防火墙。
我在运行MongoDB 2.6.0的CentOS 6.5上遇到了同样的错误。在机器上禁用防火墙解决了我的问题。
答案 2 :(得分:0)
models.py
from mongoengine import *
class UserLocation(Document):
message = StringField(required=True, max_length=200)
你不需要sqlite3,如果你没有使用它,只有mongodb然后你有一个选项来评论它
settings.py
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
现在在
views.py
from .models import UserLocation
def save_function(request):
msg = "shinto"
# saving the data to the database
data = UserLocation(message = msg)
data.save()
# reading the data
read_data = json.loads(UserLocation.objects().to_json())
print read_data
views.py
from pymongo import MongoClient
client = MongoClient(port=27017)
db = client.testing_db # use a database called testing_db
collection = db.files # inside that db a collection called files
def a_new_function():
fooman = {"name" : "shinto", "age" : 25}
collection.insert(fooman)
# if you need to display only the name "shinto
#cursor = collection.find({"name" : "shinto"})
# if you need to display all then empty
cursor = collection.find({})
for document in cursor:
print(document)
要在ubuntu上安装,请执行以下操作
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
如果Ubuntu 12.04(已弃用),则在终端
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
如果Ubuntu 14.04然后在终端
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
如果Ubuntu 16.04则在终端
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
完成后
sudo apt-get update
sudo apt-get install -y mongodb-org
安装后然后启动mongodb
sudo service mongod start
停止mongodb做
sudo service mongod stop
重启mongodb
sudo service mongod restart
最后你可以使用
mongo --host 127.0.0.1:27017
将解决问题
谢谢
答案 3 :(得分:0)
从您的问题看来,您似乎正在尝试将Django与Mongodb一起使用。在哪种情况下你为什么需要Mongoengine?
hinted at in a Visual Studio 2017 Preview blog post文档介绍了official Mongodb。它的工作原理是将SQL查询转换为查询文档。
你不需要Mongoengine来运行它。
所有原生的Django贡献模块(例如,管理员,用户,会话)都在不做任何修改的情况下工作。
MongoEngine需要重写Django模块,最后我检查过,本机管理模块没有在MongoEngine上运行。
您现有的模型也没有任何ORM翻译。