2012-05-17 6 views
13

Zu meiner Überraschung habe ich diese Frage nicht anderswo gefragt. Kurze Version, ich schreibe eine App, die ich in der Cloud bereitstellen möchte (wahrscheinlich mit Heroku), die verschiedene Web Scraping und Datensammlung durchführen wird. Der Grund, warum es in der Cloud sein wird, ist so, dass ich es so einrichten kann, dass es jeden Tag von selbst läuft und die Daten in seine Datenbank zieht, ohne dass mein Computer eingeschaltet ist, so dass der Rest des Teams auf die Datenbank zugreifen kann Daten.Python-Datenbank ohne Verwendung von Django (für Heroku)

Ich habe AWS SimpleDB und DynamoDB verwendet, aber ich fand SDBs Speicherbeschränkungen zu klein und DDBs schlechte Abfragefähigkeit ist ein Problem, daher suche ich nach einem Datenbanksystem (SQL oder NoSQL), das speichern kann Werte beliebiger Länge (und idealerweise beliebige Datenstrukturen), die auf jedem Feld abgefragt werden können.

Ich habe viele Datenbanklösungen für Heroku gefunden, z. B. ClearDB, aber alle Informationen, die ich gesehen habe, haben gezeigt, wie Django für den Zugriff auf die Datenbank eingerichtet wird. Da dies Skript und keine Website sein soll, würde ich es wirklich vorziehen, nicht in Django einzutauchen, wenn ich nicht muss.

Gibt es irgendeine Art von Datenbank, die ich in Heroku mit Python verbinden kann, ohne Django zu benutzen?

Antwort

3

Ich würde MongoDB verwenden. Heroku hat Unterstützung dafür, also denke ich, dass es wirklich einfach ist, zu beginnen und zu skalieren: https://addons.heroku.com/mongohq

Über Python: MongoDB ist eine wirklich einfache Datenbank. Das Schema ist flexibel und passt sehr gut zu Python-Wörterbüchern. Das ist etwas wirklich Gutes.

können Sie PyMongo

from pymongo import Connection 
connection = Connection() 

# Get your DB 
db = connection.my_database 

# Get your collection 
cars = db.cars 

# Create some objects 
import datetime 
car = {"brand": "Ford", 
     "model": "Mustang", 
     "date": datetime.datetime.utcnow()} 

# Insert it 
cars.insert(car) 

Ziemlich einfach verwenden, äh?

Ich hoffe, es hilft.

EDIT:

Wie Endophage erwähnt, eine weitere gute Option mit Mongo für die Anbindung ist mongoengine. Wenn Sie viele Daten speichern müssen, sollten Sie einen Blick darauf werfen.

+1

+1 für mongo, aber ich würde auch mongoengine empfehlen, das eine ORM-Ebene über Pymongo und GridFS bietet. – Endophage

+1

@Endophage das ist wahr. Wie er Einfachheit will, empfahl ich Pymongo. Aber ich sollte das erwähnen. Danke! – santiagobasulto

+0

Was ist der Vorteil von Mongoengine gegenüber Pymongo? Wenn überhaupt, sieht es so aus, als ob Mongoengine Schemen schreiben muss, Pymongo dagegen nicht. – jdotjdot

0

Erstellen Sie eine eigenständige Heroku Postgres-Datenbank. http://postgres.heroku.com

+0

Okay, aber die Frage bleibt t hier - wie würde ich mit Python daran anschließen? 'psycopg2'? – jdotjdot

3

Ich tat dies kürzlich mit Flask. (https://github.com/HexIce/flask-heroku-sqlalchemy).

Es gibt ein paar Fallstricke:

heroku addons:add shared-database 

(Oder je nachdem, welche Datenbank Sie wollen:

1. Wenn Sie nicht über Django verwenden können Ihre Datenbank selbst, indem Sie müssen einrichten verwenden, die anderen kosten Geld.)

2. Die Datenbank-URL wird in Heroku in der Umgebungsvariablen "DATABASE_URL" gespeichert. In Python können Sie es tun, indem Sie tun.

Was Sie tun, um von dort aus mit der Datenbank zu verbinden, liegt bei Ihnen, eine Option ist SQLAlchemy.

+0

Kein Rep, kann aber nicht bearbeitet werden: - [Heroku-Datenbankseite] (https://devcenter.heroku.com/articles/database) & [SQLAlchemy in Flask] (http://flask.pooco.org/docs/patterns/sqlalchemy /) – chromy

+2

Anstelle von 'shared-database' verwenden Sie' heroku-postgresql: dev', das ebenfalls kostenlos ist und Sie von außerhalb heroku verbinden kann, ist postgres 9.1, etc: https: //postgres.heroku. com/blog/past/2012/4/26/heroku_postgres_development_plan/ – Will

19

Sie können eine von Heroku bereitgestellte Datenbank abrufen, ohne dass Ihre App Django verwenden muss.Dazu:

heroku addons:add heroku-postgresql:dev 

Wenn Sie eine größere mehr dedizierten Datenbank benötigen, können Sie die Pläne auf Heroku Postgres

Innerhalb Ihres requirements.txt untersuchen werden Sie hinzufügen möchten:

psycopg2 

Dann können Sie eine Verbindung herstellen/interagieren wie folgt:

import psycopg2 
import os 
import urlparse 

urlparse.uses_netloc.append('postgres') 
url = urlparse.urlparse(os.environ['DATABASE_URL']) 

conn = psycopg2.connect("dbname=%s user=%s password=%s host=%s " % (url.path[1:], url.username, url.password, url.hostname)) 
cur = conn.cursor() 

query = "SELECT ...." 
cur.execute(query) 
+0

vielen Dank! Ich habe versucht, eine leere Postgres-Flasche App für eine Weile laufen zu lassen, und alle, über die ich schreiben möchte, sind heutzutage sqlalchemy. –

+0

Ich bekomme einen ' 'in der Zeile mit' DATABASE_URL', wenn ich versuche, dies auszuführen. Irgendwelche Vorschläge? –

+0

Wenn Sie Flask verwenden, wird Flask-SQLAlchemy einen Verbindungspool hochfahren und Ihnen eine nette db.Model-Klasse geben, um deklarative Modelle zu definieren. SQLAlchemy bietet Ihnen viele Möglichkeiten, mit Ihrer Datenbank zu interagieren. –

Verwandte Themen