Как я могу использовать дополнение mongolab для Heroku из python? - PullRequest
2 голосов
/ 14 января 2012

Документация говорит только о том, как сделать это из ruby.

Ответы [ 5 ]

10 голосов
/ 14 января 2012

Это воля от MongoLab.У нас есть общий пример того, как подключиться в Python, используя официальный драйвер python (pymongo).Этот пример не для соединения с Heroku, скажем так, но он должен быть похожим.Разница в том, что вам нужно будет вытащить конфигурацию вашего драйвера из среды Heroku ENV для подачи на драйвер.

https://github.com/mongolab/mongodb-driver-examples/blob/master/python/pymongo_simple_example.py

Если у вас все еще есть проблемы, не стесняйтесь обращаться к нам напрямую по адресу support@mongolab.com

-will

6 голосов
/ 20 августа 2012

Я использую следующее:

import os
from urlparse import urlsplit
from pymongo import Connection

url = os.getenv('MONGOLAB_URI', 'mongodb://localhost:27017/testdb')
parsed = urlsplit(url)
db_name = parsed.path[1:]

# Get your DB
db = Connection(url)[db_name]

# Authenticate
if '@' in url:
    user, password = parsed.netloc.split('@')[0].split(':')
    db.authenticate(user, password)
4 голосов
/ 14 января 2012

Получите параметры строки подключения, введя heroku config в командной строке после установки надстройки для приложения heroku.

В этой форме будет запись с ключом MONGOLAB_URI:

MONGOLAB_URI => mongodb://user:pass@xxx.mongolab.com:27707/db

Просто информация из URI в Python путем создания соединения из строки URI.

1 голос
/ 18 июля 2012

Я думаю, что-то вроде этого должно работать:

import os
import sys
import pymongo


mongo_url = os.getenv('MONGOLAB_URI', 'mongodb://localhost:27017')
db_name = 'mongotest'

if __name__ == '__main__':
  try:
   connection = pymongo.Connection(mongo_url)
   if 'localhost' in self.mongo_url:
     db_name = 'my_local_db_name'
   else:
     db_name = self.mongo_url.rsplit('/',1)[1]
   database = connection[db_name]
  except:
   print('Error: Unable to Connect')
   connection = None

if connection is not None:
  database.test.insert({'name': 'foo'})
0 голосов
/ 25 августа 2013

PyMongo теперь предоставляет метод get_default_database(), который делает все это упражнение тривиальным:

from pymongo import MongoClient

client = MongoClient(os.environ['MONGOLAB_URI'])
db = client.get_default_database()
...