micromongo

Tela Software:
micromongo
Detalhes de Software:
Versão: 0.1.4
Data de upload: 14 Apr 15
Revelador: Jason Moiron
Licença: Livre
Popularidade: 2

Rating: nan/5 (Total Votes: 0)

micromongo é uma pequena camada em torno pymongo que permite criar classes simples de estilo ORM que podem executar a validação, permitem o acesso de ponto para documentos, resultados queryset auto-wrap, e dar-lhe pré / pós save ganchos.
Ele é projetado com microframeworks em mente, mas é a aplicação e quadro agnóstico. Ele foi criado para simplificar o uso de pymongo e fornecer ferramentas para expressões idiomáticas comuns, para não obscurecer pymongo ou mongodb de suas estruturas de dados.
Você está convidado a abrir questões ou enviar solicitações de tração no github do micromongo
micromongo faz algumas decisões de design em nome da simplificação que pode não funcionar para você:
& Nbsp; - & nbsp; micromongo mantém uma única conexão global, de modo que você não pode ter modelos que se conectam a vários servidores MongoDB
& Nbsp; - & nbsp; há um punhado de nomes de modelos e nomes de atributos de documentos que não funcionam com modelos micromongo; eles serão abordados nos documentos completos
& Nbsp; - & nbsp; você só pode ter um modelo por coleção
Introdução
Para começar com micromongo, basta importá-lo:
>>> From importação micromongo conectar, Modelo
>>> C = connect ()
connect leva os mesmos argumentos como objeto de conexão de pymongo, e comporta-se de forma quase idêntica, exceto que ele tenta retornar automaticamente os resultados da consulta envolvidos nas classes modelo adequado. O objeto de conexão que você crie via esta chamada será armazenada e utilizada pelas várias instalações ORM de estilo, como model.save (), Model.proxy, etc. Se você quiser, um objeto de conexão padrão limpo, você pode obter um facilmente :
>>> From micromongo importação clean_connection
>>> Clean = clean_connection ()
Note-se que clean_connection não ter argumentos e sempre retornará a classe Connection limpo com as mesmas configurações da conexão micromongo atual.
Com esses objetos de conexão, você pode criar bancos de dados ou fazer o que você faria com objetos normais pymongo:
>>> Db = c.test_db
>>> Coleção = db.test_collection
>>> Collection.save ({"docid": 1, "falha": false})
>>> Collection.find_one ()
{U'_id ': ObjectId (' ... '), u'fail': False, u'docid ': 1}
Você também pode declarar o seu próprio modelo para uma coleção particular, em estilo declarativo:
>>> TestModel classe (Modelo):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; collection = "test_db.test_collection '
>>> Collection.find_one ()

Essas classes têm uma série de recursos adicionais mais de um dicionário que pode torná-los muito mais fácil de usar. As teclas de documentos são acessíveis como atributos:
>>> T = collection.find_one ()
>>> T.fail
Falso
>>> T.docid
1
Os documentos também são facilmente persistiu ao banco de dados:
>>> T.docid = 17
>>> T.save ()
>>> Clean.test_db.test_collection.find_one ()
{U'_id ': ObjectId (' ... '), u'fail': False, u'docid ': 17}
modelos que definem
Acima, o atributo coleção foi designado para o nosso modelo de Foo. Este foi um atalho, embora; se do banco de dados e coleta são atribuídos separadamente, o modelo pode descobrir o nome da coleção completa. Se a coleção e banco de dados não estiverem presentes, micromongo tenta descobrir isso com base na classe e módulo nome do seu modelo. Por exemplo, se tornará blog.Post blog.post, ou se tornará stream.StreamEntry stream.stream_entry. Explícito é melhor que implícito, e é incentivado que você definir a coleção manualmente.
Além de embalar e desembalar os resultados do banco de dados, os modelos também pode definir um documento de especificação que pode definir os padrões e executar a validação antes de salvar o modelo. Tome um modelo post trivial:
>>> From importação micromongo.spec *
>>> Class Post (Modelo):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; coleta = 'test_db.blog_posts'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; especificação = dict (
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; author = Campo (obrigatório = True, default = "jmoiron ', type = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; title = Field (required = False, default = '', type = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; publicado = Campo (obrigatório = True, default = False, type = [verdadeiro, falso]),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; body = Field (type = unicode),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; timestamp = Field (),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; )
>>> P = Post.new ()
>>> P

Algumas coisas estão acontecendo aqui. Os campos que têm um padrão são inicializados para que a inadimplência se elas são necessárias ou não. Se um campo obrigatório não tem um padrão, é inicializado para Nenhum.
Campos pode ter um argumento tipo, que pode ser tanto uma função que recebe um valor e retorna verdadeiro ou falso, de um ou mais tipos de base, ou um ou mais valores. Se um ou mais tipos são fornecidos, isinstance é usado para testar se os valores são o tipo certo. Se um ou mais valores são fornecidos, o campo atua como um tipo de enumeração, verificando se os valores estão em seu conjunto de valores. Se nenhum tipo é dado, a validação passa sempre sobre um campo menos que seja necessário e ausente.
Se um campo em p é dado um tipo inválido, então um ValueError é levantada:
>>> P.title = 10
>>> P.save ()
Traceback (most recent call last):
& Nbsp; ...
ValueError: Chaves não encontrou spec: ['title']
>>> Del p.author
>>> P.save ()
Traceback (most recent call last):
& Nbsp; ...
ValueError: campos em falta: ['autor'], campos inválidos: ['title']
>>> P.title = 'Minha primeira blogpost'
>>> P.author = 'jmoiron'
>>> P.published = True
>>> P.body = u "Este é meu primeiro post no blog .. & nbsp; Estou tão animado!"
>>> P.save ()
Model.find
Para maior comodidade e seco, Model.find é um classmethod que usará cursor do micromongo para emitir um achado contra a cobrança direita. Este método se comporta exatamente o mesmo que collection.find de pymongo.
classe de micromongo Cursor ligeiramente modificada também faz um método order_by de inspiração django disponível para todos os cursores (encontrar e qualquer coisa que você encadear fora se ele retorna um cursor). Você pode passar um ou mais nomes de campo, com um líder opcional '-', para resolver as coisas por ordem crescente ou decrescente.
Estas mudanças permitem que você use a maioria do poder de pymongo sem ter que importá-lo, e permite-lhe evitar a repetição desnecessária de a localização de seus dados.
campo de subclasses
Você é encorajado a criar seus próprios campos que fazem o que você quer. Subclasses de campo tem um pre_validate função de gancho que tomar um valor de entrada e pode transformá-lo da forma que quiserem. Note que isto só irá funcionar se os campos estão realmente presentes; de modo a obter algo como um auto_now_add em um DateTimeField, você vai querer fazê-la necessária e tem o seu pre_validate transformar None em datetime.datetime.now ()

Requisitos :.

  • Python

Programas semelhantes

phpMyBackupPro
phpMyBackupPro

19 Feb 15

Structurarium
Structurarium

20 Feb 15

SnapLogic
SnapLogic

3 Jun 15

Outro software de desenvolvedor Jason Moiron

speedparser
speedparser

14 Apr 15

redtape
redtape

14 Apr 15

pdf2zip
pdf2zip

11 May 15

Comentário para micromongo

Comentários não encontrado
Adicionar comentário
Ligue imagens!