sqlalchemy 复制关系集合的内容
sqlalchemy copy contents of relationship collection
我有一个 table 有关系。它看起来像这样:
class User(Base)
userId = Column(TEXT, primary_key=True)
products = relationship('Products', backref=backref('Products'))
加载后,我最终得到一个附加到 User 对象的集合,其中包含与该用户相关的所有产品。伟大的!正是我想要的!然后我尝试将这个集合从一个用户复制到另一个用户。这失败了。当我尝试将第二个用户的引用设置为第一个集合时,它成功了,但它删除了第一个用户的引用!这对我来说完全没有意义。它看起来像下面这样:
user1.products
>>>> InstrumentedList[product1, product2]
user2.products
>>>> InstrumentedList[]
user2.products = user1.products
user1.products
>>>>[]
user2.products
>>>>[product1, product2]
这似乎违反了我所知道的关于引用在 python 中如何工作的所有知识。将引用分配给集合不应影响其他现有引用。任何人都可以阐明这一点吗?
我想通了这里的问题。问题是我试图在多对多关系上下文中分配具有一对多关系的对象。一个产品只能有一个用户,所以当一个人将一个产品分配给一个用户时,之前的关系就被移除了。这在集合中的表示方式让人很困惑。
我有一个 table 有关系。它看起来像这样:
class User(Base)
userId = Column(TEXT, primary_key=True)
products = relationship('Products', backref=backref('Products'))
加载后,我最终得到一个附加到 User 对象的集合,其中包含与该用户相关的所有产品。伟大的!正是我想要的!然后我尝试将这个集合从一个用户复制到另一个用户。这失败了。当我尝试将第二个用户的引用设置为第一个集合时,它成功了,但它删除了第一个用户的引用!这对我来说完全没有意义。它看起来像下面这样:
user1.products
>>>> InstrumentedList[product1, product2]
user2.products
>>>> InstrumentedList[]
user2.products = user1.products
user1.products
>>>>[]
user2.products
>>>>[product1, product2]
这似乎违反了我所知道的关于引用在 python 中如何工作的所有知识。将引用分配给集合不应影响其他现有引用。任何人都可以阐明这一点吗?
我想通了这里的问题。问题是我试图在多对多关系上下文中分配具有一对多关系的对象。一个产品只能有一个用户,所以当一个人将一个产品分配给一个用户时,之前的关系就被移除了。这在集合中的表示方式让人很困惑。