Объявите модель перед созданием соединения в ming

Я хочу, чтобы мои модели были удалены, прежде чем устанавливать соединение с базой данных (по какой-то причине, например, многопоточность и динамическая загрузка uri конфигурации базы данных).

В документации говорится, что нужно использовать так:

from ming import create_datastore
from ming.odm import ThreadLocalODMSession
from ming import schema
from ming.odm import FieldProperty
from ming.odm.declarative import MappedClass

session = ThreadLocalODMSession(
    bind=create_datastore('odm_welcome')
)

class WikiPage(MappedClass):
    class __mongometa__:
        session = session
        name = 'wiki_page'

    _id = FieldProperty(schema.ObjectId)
    title = FieldProperty(schema.String(required=True))
    text = FieldProperty(schema.String(if_missing=''))

Мы можем видеть, какое объявление модели нужно session__mongometa__). Как я могу объявить модель WikiPage без переменной session? А поставить потом?


person bux    schedule 23.01.2017    source источник


Ответы (1)


Решение может быть объявлено моделью без __mongometa__:

class WikiPage(MappedClass):
    _id = FieldProperty(schema.ObjectId)
    title = FieldProperty(schema.String(required=True))
    text = FieldProperty(schema.String(if_missing=''))

Затем сделайте сопоставление вручную с коллекцией:

session = ODMSession(bind=create_datastore(uri))
collection_ = collection('wiki_page', session)
session.mapper(WikiPage, collection_)
person bux    schedule 24.01.2017