python-sqlalchemy-orm将json映射到多个表的一对多双向关系

2024-06-16 11:24:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用sqlalchemy orm将json映射到多个表。 我有两张桌子,每张桌子我都有一节课

其中一个表有一个参数,它是字典列表,必须映射到第二个表的不同列


from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship

Base = declarative_base()

class A(Base):
    __tablename__ = 'a'
    id = Column(primary_key, Interger(10))
    param1 = Column(String(45))
    param2 = Column(String(45))
    atobmap = relationship('B', lazy='subquery', back_populates="a")

class B(Base):
    __tablename__ = 'b'
    bid = Column(primary_key=True, nullable=True, Integer(15))
    bparam1 = Column(ForeignKey('a.id'), nullable=False)
    bparam2 = Column(String(45))
    a = relationship('A', back_populates='b')

示例json:

{
    "id": 1,
    "param1": "Value",
    "param2": "Value",
    "atobmap": [
                 { "bid": 1,
                   "bparam1": 1,
                   "bparam2": "Value"
                 },
                 { "bid": 2,
                   "bparam1": 1,
                   "bparam2": "Value"
                 }
               ]
}

当我手动将数据插入到表中并执行GET时,它工作正常,并按预期返回值,尽管它在atobmap字典中添加了一个值为{}的{sa\u instance\u state键

{
...
"atobmap": [
                 { "_sa_instance_state": {}
                   "bid": 1,
                   "bparam1": 1,
                   "bparam2": "Value"
                 },
                 { "_sa_instance_state": {}
                   "bid": 2,
                   "bparam1": 1,
                   "bparam2": "Value"
                 }
       ]
}            

但是当我试图发布这些值时,它抛出一个错误"Unhashable type: dict".


Tags: fromimportidbasestringsqlalchemyvaluesa