Django - MongoDB :(无法连接到localhost:27017)连接被拒绝

时间:2012-03-01 03:24:39

标签: django mongodb

我遇到让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的实例

4 个答案:

答案 0 :(得分:3)

您是否单独设置了MongoDB?您链接的方法似乎没有超过MongoDB配置。它假定数据库已在运行。在任何情况下,MongoDB似乎都失败了,或者至少在其他地方倾听。

最后一个错误(“... int的实例”)只是因为您在配置字典中指定了'27017'(字符串)而不是27017。但即便如此,它应该等同于第一个更简单的配置。

答案 1 :(得分:0)

如果MongoDB正在运行但是在尝试从另一台计算机连接时仍然出现此错误,则可能是由于在MongoDB服务器上运行了防火墙。
我在运行MongoDB 2.6.0的CentOS 6.5上遇到了同样的错误。在机器上禁用防火墙解决了我的问题。

答案 2 :(得分:0)

如果您在models.py上创建模型,那么下面有一个示例

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

还有另一种方法,它非常简单(你不需要在models.py中创建模型)

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)

无法连接到localhost:27017连接被拒绝或者您看到111是因为您还没有在另一个终端中安装或打开mongodb

要在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翻译。