查询一对多sqlalchemy

时间:2018-03-26 19:59:11

标签: python sqlalchemy flask-sqlalchemy

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="content">
  {{ text }}
</div>

我想检索所有订单,但是当我打电话

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()

它让我回复:

Order.get_all_orders()

我想要他的名字,而不是检索用户ID,而不是

|1|carrot|23

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

编辑:在sql中,这样做是

|1|carrot|buyer1

2 个答案:

答案 0 :(得分:0)

如果您更改get_all_orders()方法以指定所需的列并指定过滤器,则可能会获得所需的内容。具体做法是:

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

答案 1 :(得分:0)

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

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

但也是这样

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