2012-03-01 283 views
0

我有問題讓MongoDB與Django一起工作,我的設置是Mac OS X 10.7。我按照這裏提供的教程:http://django-mongodb.org/topics/setup.html。我已經嘗試了兩個virtualenv和沒有(這是我第一次安裝Django,所以我不應該有任何衝突)。Django - MongoDB :(無法連接到本地主機:27017)連接被拒絕

在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() 

在我的殼(蟒蛇manage.py殼),我嘗試運行:

from mydjango.firstapp.models import Post 
post = Post.objects.create(); 

但我不斷收到以下內容:DatabaseError:無法連接到本地主機:27017:[Errno 61]連接拒絕full traceback

如果我切換settings.py以下幾點:ImproperlyConfigured:

DATABASES = { 
    'default': { 
     'ENGINE': 'django_mongodb_engine', 
     'NAME': 'my_database', 
     'USER': '', 
     'PASSWORD': '', 
     'HOST': 'localhost', 
     'PORT': '27017', 
     'SUPPORTS_TRANSACTIONS': False, 
    }, 
} 

我在shell得到這個錯誤的端口必須是INT

+0

你真的在'localhost'上運行MongoDB實例嗎? – 2012-03-01 03:31:39

回答

3

難道一個實例你分別設置MongoDB?你如何鏈接似乎沒有通過MongoDB配置。它假定數據庫已經在運行。在任何情況下,MongoDB似乎都失敗了,或者至少在別的地方聽。

最後一個錯誤(「... int實例」)僅僅是因爲您在配置字典中指定了'27017'(字符串)而不是27017。但即使如此,它應該等同於第一個更簡單的配置。

0

如果MongoDB正在運行,但在嘗試從另一臺計算機進行連接時仍然出現此錯誤,則可能是由於MongoDB服務器上運行防火牆。
我在運行MongoDB 2.6.0的CentOS 6.5上遇到了同樣的錯誤。禁用機器上的防火牆解決了我的問題。

2

如果要創建在models.py模型,然後下面有一個例子

models.py

from mongoengine import * 

class UserLocation(Document): 

    message = StringField(required=True, max_length=200) 

你不,如果你不使用它,只有MongoDB的,那麼你需要的sqlite3的有OPTIO評論它

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創建模型)

意見。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) 

無法連接到本地主機: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 

這將解決這一問題

謝謝

0

從你的問題好像你是tr在Mongodb中使用Django。在這種情況下,你爲什麼需要Mongoengine?

official Mongodb文檔談到了djongo。它通過將SQL查詢轉換爲查詢文檔起作用。

你不需要Mongoengine來運行它。

所有原生的Django contrib模塊(例如admin,user,session)都不做任何修改。

MongoEngine需要重寫Django模塊,最後我檢查了本機管理模塊沒有在MongoEngine上運行。

您的現有模型在沒有任何ORM轉換的情況下運行。

相關問題