Ответы пользователя по тегу ORM
  • Как реализовать одновременное подключение модели peewee к нескольким БД?

    @LocNar
    Proxy — peewee API#Proxy

    В продолжение темы, если грязно эмулировать работу django:
    # -*- coding: utf-8 -*-
    
    import peewee
    
    db = peewee.Proxy()
    first = peewee.SqliteDatabase('first.db')
    second = peewee.SqliteDatabase('second.db')
    
    
    class Test(peewee.Model):
        name = peewee.CharField()
    
        class Meta:
            database = db
            db_table = 'test'
    
        @classmethod
        def using(cls, db):
            cls._meta.database.initialize(db)
            return cls
    
    db.initialize(first)
    Test.create_table(fail_silently=True)
    db.initialize(second)
    Test.create_table(fail_silently=True)
    
    Test.using(first).create(name='Test1')  # Переключились на first
    Test.create(name='Test2')  # Используется ранее переключенная база first
    Test.using(second).create(name='Test3')  # Переключились на secong
    Test.create(name='Test4')  # Пишется в second
    Test.using(first).create(name='Test5')
    print ','.join([x.name for x in Test.using(first).select()])
    # Test1,Test2,Test5
    print ','.join([x.name for x in Test.using(second).select()])
    # Test3,Test4


    Вообще peewee активно развивается и постоянно вводит новые фичи, так что можно написать ему на github, вполне возможно, что в следующей версии грязные хаки не понадобятся.

    Но тем не менее до сих пор сомневаюсь в целесообразности подобного поведения в целом.

    Ещё возможно алиасы моделей могут иметь свои подключения, но читать сурс или проверять лень.
    Ответ написан