У меня есть две модели, в которых обе модели возвращаются toDict:
Tableone Model
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 Model
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'],[...],[...],[...],]
Но мне нужно получить все данные из таблицы соединений, не упоминая, что выбрать один за другим, а также получить ключ для доступа к ним в ответ.
Пожалуйста, помогите мне, как сделать это правильно.Я очень новый в питоне.Спасибо заранее.
[ОБНОВЛЕНИЕ 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
[ОБНОВЛЕНИЕ 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
Но ошибка упоминается в [ОБНОВЛЕНИЕ 1]