查询一对多sqlalchemy

2024-04-25 13:00:26 发布

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

class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    order = db.relationship('Order', backref='add_order_for_user', lazy='dynamic')

class Order(db.Model):
    __tablename__ = 'orders'

    id = db.Column(db.Integer, primary_key=True)
    product_name = db.Column(db.String(64))
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    @classmethod
    def get_all_orders(cls):
        return cls.query.filter_by().all()

我想取回所有的订单

^{pr2}$

它给我的回报是:

|1|carrot|23

我不想检索用户id,而是想知道他的名字,这样我就可以

|1|carrot|buyer1

任何帮助将不胜感激:)thx

编辑:在sql中,应该这样做

select orders.id, product_name, users.username from orders, users where orders.user_id = users.id

Tags: keyidtruedbstringmodelusernamecolumn
2条回答

嗯,不确定它是否漂亮,但我设法做到了:

db.session.query(Order.id, product_name, ,User.username).filter(Order.user_id==User.id).all()

但也是这样

^{pr2}$

如果更改get_all_orders()方法以指定所需的列并指定筛选器,则可能会得到所需的结果。具体来说:

return cls.query(cls.id,cls.product_name,User.username).filter_by(cls.user_id ==User.id).all()

相关问题 更多 >