如何在SQLAlchemy下映射和取消映射对象?

时间:2011-12-05 17:07:07

标签: python sqlalchemy

是否可以在SQLA下为特定类映射和取消映射映射器关系,而不必调用clear_mappers()后者非常愚蠢,我怀疑它的表现会非常糟糕。< / p>


底色

我有以下设置:一个Slave类,创建一些Fubar类型的对象,并通过套接字将它们发送到它的Master。 Master有一个数据库ORM(通过SQLAchemy),并知道如何将这些对象映射到数据库的表。我确实希望Slaves不知道任何数据库。所有数据库代码都在Master中 - 初始化,引擎创建和sqlalchemy.orm.mapper(...)调用。我期望通过Master类抽象整个数据库是可能的。

但是,我收到以下异常:

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

这个实例是由Slave创建的,它对数据库一无所知。我不希望它知道关于数据库的任何信息或如何将Fubar映射到表格或任何东西。我只是想让师父知道如何做到这一点。由于Master知道如何映射那些Fubar类,我认为它是可能的。毕竟,Master在将映射到数据库之后获取此类实例。然而,我得到了上述例外。

任何人都在关心解释我在做什么,这是错误的?

更多细节......

我使用的是经典映射而不是类内描述性数据,因为我不希望任何导入类的人知道它可能存储在数据库中 - 或者说他们不需要知道它的细节。 / p>

即使使用copy.deepcopy(fubar)作为替代品,我仍然会收到该错误。另一方面,如果我在Master中创建一个新的Fubar对象,其数据与旧的(来自网络)Fubar相同,那么我可以使用它。我现在更加困惑......

反向操作(将Fubar从Master发送到Slave)表现出同样的问题,如下所示:

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下映射和取消映射对象?

0 个答案:

没有答案