如何使用flasksqlalchemy从多个表中获取数据

2024-06-25 23:01:12 发布

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

这是我的桌子

class maindevotee(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(225))
    phonenumber = db.Column(db.String(225))
    gothram = db.Column(db.String(225))
    date = db.Column(db.String(50))
    address = db.Column(db.String(250))

    def json(self):
        return {'id': self.id, 'name':self.name, 'phonenumber': self.phonenumber, 'gothram': self.gothram,
                'date': self.date, 'address': self.address}

class relatives(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    main_id = db.Column(db.Integer, db.ForeignKey('maindevotee.id'), nullable=False)
    name = db.Column(db.String(225))
    star = db.Column(db.String(225))
    gender = db.Column(db.String(45))
    relation = db.Column(db.String(45))

    def json(self):
        return {'main_id': self.main_id, 'name': self.name, 'star':self.star,
                'gender': self.gender, 'relation': self.relation}
    
class services(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    main_id = db.Column(db.Integer, db.ForeignKey('maindevotee.id'), nullable=False)
    pooja = db.Column(db.String(225))
    god = db.Column(db.String(225))
    price = db.Column(db.Float)
    donation = db.Column(db.String(225))
    booking_fromdate = db.Column(db.String(50))
    booking_todate = db.Column(db.String(50))
    prasadam = db.Column(db.String(225))

    def json(self):
        return {'main_id': self.main_id, 'pooja': self.pooja, 'god': self.god,
                'price': self.price, 'donation': self.donation, 'booking_fromdate': self.booking_fromdate,
                'booking_todate': self.booking_todate, 'prasadam': self.prasadam}

如何在一个请求中从多个表中获取数据。这是我连接三个表的侦察代码。 若我试图从数据库中获取数据,它将引发一个错误。 错误为AttributeError:“结果”对象没有属性“获取数据” 我可以使用外键从数据库中获取数据吗

data = db.session.query(maindevotee, relatives, services)\
    .filter(maindevotee.phonenumber == 3251469870)\
    .join(relatives, maindevotee.id == relatives.main_id)\
    .join(services, maindevotee.id == services.main_id)\
    .first()

def get_data():
    return [data.json(get) for get in data.query.all()]

@app.route('/getdata/<phonenumber>',methods=['GET'])
def getdata():
    return jsonify({'Devotee list': data.get_data()})

Tags: nameselfidjsondbdatastringreturn
1条回答
网友
1楼 · 发布于 2024-06-25 23:01:12

正确的

data = db.session.query(maindevotee, relatives, services)\
    .filter(maindevotee.phonenumber == 3251469870)\
    .join(relatives, maindevotee.id == relatives.main_id)\
    .join(services, maindevotee.id == services.main_id)\
    .first()

data = db.session.query(maindevotee, relatives, services)\
    .filter(
    (maindevotee.phonenumber == '3251469870')
    & (maindevotee.id == relatives.main_id)
    & (maindevotee.id == services.main_id)
    ).first()

如需更多澄清,请在评论中询问

经评论

@app.route('/getdata/<phonenumber>',methods=['GET'])
def getdata():
    return jsonify({'Devotee list': data.get_data()})

data包含不包含函数get_data()的查询结果,因此您将面临上述错误

尝试以下修改,我认为这是您可能需要的结果表单:

@app.route('/getdata/<phonenumber>',methods=['GET'])
def getdata():
    return jsonify({**data.maindevotee.json(),**data.relatives.json(),**data.services.json()})

祝你好运

相关问题 更多 >