Ich versuche, von SQLalchemy (SQlite) auf Mongodb umzusteigen. Ich möchte eine Schema-Vertifizierung. Ich schaue auf Mongokit, aber ich möchte etwas, das Mappern ähnlich ist, damit es aus dem Eigentum des Objekts gerettet wird und kein Diktat.
Ich möchte einen Mapper, damit ich vorhandene Objekte verwenden kann, ohne sie zu ändern.
Es gibt eine Bibliothek namens Mongolei, mit der Sie über Attribute oder Wörterbuchzugriff mit Mongo-Objekten interagieren können. Sie verfügt über eine Schemaüberprüfung
Zags
@zsong Relational und Dokument ... Sollte nicht als Objekt relational und Objektdokument bezeichnet werden?
SO VIEL ICH WEISS. Sie können dem Dokument von mongoengine keine Eigenschaften im laufenden Betrieb hinzufügen. Welche Art von macht ein bisschen Spaß von Mongodb.
Tutuca
9
Sie können das DictField verwenden, um bei Bedarf jede Art von vollständig schemenlosen Daten hinzuzufügen.
Neuman
Oder das GenericEmbeddedDocument?
Tunnuz
Mongoengine hat einige schwerwiegende Leistungsprobleme. Wenn Sie es in der Produktion verwenden möchten, funktioniert es nur, wenn Sie ein sehr einfaches, leichtes Schema haben.
Valerie R. Coffman
3
Für diejenigen, die einen umfassenderen Überblick über MongoDB-ORMs suchen, die für Python verfügbar sind, werden auf der PyMongo-Seite "Tools" einige davon aufgelistet
Ascendant
40
Da ich weder mit MongoKit noch mit MongoEngine zufrieden war, beschloss ich, meine eigene objektorientierte Oberfläche für Python zu schreiben.
Ich habe alle Abfragen direkt an pymongo delegiert, daher ist die Abfragesyntax dort dieselbe. Meistens handelt es sich nur um einen Objekt-Wrapper um die Ergebnisse, mit einigen anderen Hilfsprogrammen wie Datenbankverbindungspooling, DBRef-Unterstützung und anderen praktischen Methoden, die Ihnen das Leben erleichtern.
Es heißt Minimongo und ist bei Github erhältlich. Viel Spaß beim Hacken!
Beispiel:
from minimongo importModel,MongoCollectionclassMyObject(Model):
model =MongoCollection(database='test', collection='my_collection')
m =MyObject()
m.x =1
m.field ='value'
m.other ={'list':True}
m.save()
x =MyObject({'x':1,'y':2}).save()
objs =MyObject.find({'x':1})for o in objs:print o
Das ist super nützlich und einfach, ich wollte nur etwas, damit ich nicht daran gehindert bin, Wörterbücher zu erstellen, sonst nichts.
vishalv2050
1
Das ist wirklich schön. Schade, dass es nicht mehr gepflegt wird :(
wenn __name__ None ist
29
Du willst MongoKit . Es ist eine Abstraktionsebene höher als PyMongo . Ich bin mir nicht sicher, ob Sie Django verwenden, aber es gibt auch eine Django-Mongokit- Integration.
Beispiel aus diesem Blogbeitrag . Beachten Sie, dass Instanzen von Computer dann direkt auf make / model verweisen können, sobald die Struktur definiert ist (z. B. atari.make, c64.model, ...). Keine Notwendigkeit für Wörterbücher:
Gibt es eine Möglichkeit, dies zu tun, ohne vorhandene Geschäftslogikobjekte zu ändern? In der SQLalchemie können Sie Mapper verwenden.
Timmy
mehr chirurgische Veränderung. hält Ihr Abhängigkeitsdiagramm sauber. macht Sinn, obwohl ich keinen Weg sehe, dies direkt zu tun. Vielleicht etwas Seltsames wie Klasse MongoComputer (Computer, Dokument) oder mit irgendeiner Form von Mix-In? Interessant ...
Ryan Cox
Es ist sauber in der Chemie, daher die Frage als
Timmy
Keine Codeänderungen in Mongokit seit 2015 und keine Veröffentlichung seit 2014. Verdammt, ich verstehe diese Python-Welt nicht :(.
classWikiPage(MappedClass):class __mongometa__:
session = session
name ='wiki_page'
_id =FieldProperty(schema.ObjectId)
title =FieldProperty(str)
text =FieldProperty(str)
comments=RelationProperty('WikiComment')
Abfragen verwenden die Standard-MongoDB-Abfragesyntax (nicht die magischen Schlüsselwortargumente von Django ORM):
Ming scheint für uns der richtige Weg zu sein. Es hat sowohl die Flexibilität als auch die schematischen Konzepte, die wir brauchen. Wenn wir Strom brauchen, fallen wir nach Pymongo.
jochem
1
Ich bin neu in Mongo und Python. Gibt es ein Tutorial, auf das ich verweisen kann, um Modelle wie djangos model.py zu erstellen und Migrationsskripte mit Ming zu erstellen?
Antworten:
Eine weitere Option ist MongoEngine . Das ORM für MongoEngine ist dem von Django verwendeten ORM sehr ähnlich.
Beispiel (aus dem Tutorial):
quelle
Da ich weder mit MongoKit noch mit MongoEngine zufrieden war, beschloss ich, meine eigene objektorientierte Oberfläche für Python zu schreiben.
Ich habe alle Abfragen direkt an pymongo delegiert, daher ist die Abfragesyntax dort dieselbe. Meistens handelt es sich nur um einen Objekt-Wrapper um die Ergebnisse, mit einigen anderen Hilfsprogrammen wie Datenbankverbindungspooling, DBRef-Unterstützung und anderen praktischen Methoden, die Ihnen das Leben erleichtern.
Es heißt Minimongo und ist bei Github erhältlich. Viel Spaß beim Hacken!
Beispiel:
quelle
Du willst MongoKit . Es ist eine Abstraktionsebene höher als PyMongo . Ich bin mir nicht sicher, ob Sie Django verwenden, aber es gibt auch eine Django-Mongokit- Integration.
Beispiel aus diesem Blogbeitrag . Beachten Sie, dass Instanzen von Computer dann direkt auf make / model verweisen können, sobald die Struktur definiert ist (z. B. atari.make, c64.model, ...). Keine Notwendigkeit für Wörterbücher:
quelle
Ich weiß, dass ich mit dieser Frage sehr spät komme, aber ich bin der Autor von Ming http://merciless.sourceforge.net , einer von SQLAlchemy inspirierten MongoDB-Validierungs- und ORM-Engine. Es ist das, was wir bei SourceForge verwenden, und es gibt eine vernünftige Präsentation unter http://www.slideshare.net/rick446/rapid-and-scalable-development-with-mongodb-pymongo-and-ming sowie eine Fallstudie zu Migration von SQLAlchemy nach Ming http://www.slideshare.net/__amol__/from-sqlalchemy-to-ming-with-turbogears2 . Hier ist ein Beispiel für die ORM-Ebene in Ming (aus dem Tutorial):
Abfragen verwenden die Standard-MongoDB-Abfragesyntax (nicht die magischen Schlüsselwortargumente von Django ORM):
quelle