Можно ли выгрузить декларативные классы в SQLAlchemy?

Я работаю над библиотекой, где пользователь сможет просто объявить несколько классов, которые автоматически поддерживаются базой данных. Короче говоря, где-то в коде скрыто

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class LibraryBase(Base):
    # important library stuff

, и пользователь должен затем выполнить

class MyStuff(LibraryBase):
    # important personal stuff

class MyStuff_2(LibraryBase):
    # important personal stuff

mystuff = MyStuff()
Library.register(mystuff)
mystuff.changeIt() # apply some changes to the instance
Library.save(mystuff) # and save it

# same for all other classes

. В статической среде, например, пользователь создал один файл со всеми личными классами и импортирует этот файл, это работает очень хорошо. Все имена классов фиксированы, и SQLAlchemy знает, как сопоставить каждый класс.

В интерактивной среде все по-другому: Теперь есть шанс, что класс будет определен дважды. У обоих классов могут быть разные модули; но SQLAlchemy все равно будет жаловаться:

SAWarning: имя класса 'MyStuff' уже находится в реестре этой декларативной базы, сопоставлено с

Есть способ справиться с этим? Могу ли я каким-то образом выгрузить класс из его declarative_base , чтобы я мог заменить его определение новым?

10
задан Debilski 3 March 2011 в 19:56
поделиться