是否可以在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下映射和取消映射对象?