我有两个模型,其中两个模型都通过toDict返回:
平板模型
class Base(db.Model):
__abstract__ = True
class Tableone(Base):
__tablename__ = 'tableone'
zxc = db.Column(db.VARCHAR(20), nullable=False)
asd = db.Column(db.VARCHAR(20), nullable=False)
qwe = db.Column(db.Integer, nullable=False)
tabletwo = db.relationship("Tabletwo", primaryjoin="foreign(Tabletwo.asd) == Tableone.bnm", uselist=True)
def __init__(zxc, asd, qwe):
self.zxc = zxc
self.asd = asd
self.qwe = qwe
def toDict(self):
return { c.key: getattr(self, c.key) for c in inspect(self).mapper.column_attrs }
Tabletwo模型
class Base(db.Model):
__abstract__ = True
class Tabletwo(Base):
__tablename__ = 'tabletwo'
iop = db.Column(db.VARCHAR(20), nullable=False)
jkl = db.Column(db.VARCHAR(20), nullable=False)
bnm = db.Column(db.Integer, nullable=False)
def __init__(iop, jkl, bnm ):
self.iop = iop
self.jkl = jkl
self.bnm = bnm
def toDict(self):
return { c.key: getattr(self, c.key) for c in inspect(self).mapper.column_attrs }
两个模型都具有toDict函数。当我通过控制器访问它时:
def index():
tre = session.query(Tableone, Tabletwo).outerjoin(Tableone.tabletwo).all()
treArr = []
for tr in tre:
treArr.append(tr.toDict())
return jsonify(treArr)
它给我错误.... is not JSON serializable
如果我只使用它而不使用像这样的连接方法,它将很好用:
tre = session.query(Tableone).all()
或者,如果我提到一个接一个的连接也有效:
tre = session.query(Tableone.iop, Tableone.jkl, Tableone.bnm, Tabletwo.zxc).outerjoin(Tableone.tabletwo).all()
即使结果只是多维数组。 [['iop1','jkl1', 'bnm1', 'zxc1'],[...],[...],[...],]
但是我需要获取联接表中的所有数据,而不必一一提及要选择的内容,还需要相应的键来访问它。
请帮助我正确操作。我是python的新手。提前谢谢了。
[UPDATE 1]
我只是知道是否可以这样访问它:
for tr in tre:
treArr.append(tr.Tabletwo.toDict()) # here
return jsonify(treArr)
抛出错误,提示AttributeError: 'NoneType' object has no attribute 'toDict'
但是,如果我这样访问
for tr in tre:
treArr.append(tr.Tableone.toDict()) # here
return jsonify(treArr)
仅给出TableOne的结果
[UPDATE 2]
我打算用合并功能尝试它:
for tr in tre:
merge_two_dicts(sim.Simses.toDict(), sim.Carrier.toDict())
...
def merge_two_dicts(x, y):
z = x.copy() # start with x's keys and values
z.update(y) # modifies z with y's keys and values & returns None
return z
但是在 [UPDATE 1]
中提到了错误