Как я могу отобразить и удалить карту объектов под SQLAlchemy? - PullRequest
2 голосов
/ 05 декабря 2011

Можно ли отображать и отображать отношения сопоставления для определенного класса в SQLA без необходимости вызова clear_mappers()? Последнее было бы очень глупо, и я подозреваю, что оно будет работать очень плохо.


Backround

У меня есть следующие настройки: Ведомый класс создает несколько объектов типа Fubar и отправляет их через сокет своему Мастеру. Мастер имеет базу данных ORM (через SQLAchemy) и знает, как сопоставить эти объекты с таблицами базы данных. Я хочу, чтобы Рабы не знали ни о какой базе данных. Весь код базы данных находится в Master - инициализация, создание движка и sqlalchemy.orm.mapper(...) вызовы. Я ожидал, что можно будет абстрагировать всю базу данных с помощью мастер-класса.

Однако я получаю следующее исключение:

Class 'Fubar' is mapped, but this instance lacks instrumentation.  This occurs when the instance is created before sqlalchemy.orm.mapper(Fubar) was called.

Этот экземпляр был создан ведомым, который ничего не знает о базе данных. Я не хочу, чтобы он что-либо знал о базе данных или о том, как сопоставить Fubar с таблицами или что-либо вообще. Я просто хочу, чтобы Мастер знал, как это сделать. Поскольку Мастер знает, как отобразить эти классы Фубара, я предположил, что это будет возможно. В конце концов, Мастер получает этот экземпляр класса после того, как сопоставил его с базой данных. Все же я получаю вышеупомянутое исключение.

Кто-нибудь хочет объяснить, что я делаю, что неправильно?

Еще больше деталей ...

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

Даже используя copy.deepcopy(fubar) в качестве замены, я все еще получаю эту ошибку. С другой стороны, если я создаю новый объект Fubar в Master с теми же данными, что и старый (из сети) Fubar, то я могу использовать это. Теперь я еще больше растерялся ...

Операция реверса (отправка Фубара от Мастера к Рабу) демонстрирует ту же проблему, что и следующее:

sqlalchemy.orm.exc.UnmappedInstanceError: Cannot deserialize object of type <class 'Fubar'> - no mapper() has been configured for this class within the current Python process!

Итак, теперь вопрос:

Как отображать и удалять объекты в SQLAlchemy?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...