Flask sqlalchemy 如何查询多对多表数据
我正在使用Flask SQLalchemy尝试在两个表之间建立多对多的关系,下面是关系代码Flask sqlalchemy 如何查询多对多表数据,flask-sqlalchemy,Flask Sqlalchemy,我正在使用Flask SQLalchemy尝试在两个表之间建立多对多的关系,下面是关系代码 port_trades = db.Table( 'port_trades', db.Column('portfolio_id', db.Text, db.ForeignKey('portfolio.portfolio_id'), primary_key=True), db.Column('trade_id', db.Text, db.ForeignKey('trade.trade_
port_trades = db.Table(
'port_trades',
db.Column('portfolio_id', db.Text, db.ForeignKey('portfolio.portfolio_id'), primary_key=True),
db.Column('trade_id', db.Text, db.ForeignKey('trade.trade_id'), primary_key=True)
)
class Portfolio(db.Model):
__tablename__ = 'portfolio'
user_id = db.Column(db.Text, primary_key=True)
portfolio_id = db.Column(db.Text, primary_key=True)
portfolio_name = db.Column(db.Text)
trade_id = db.Column(db.Text, primary_key=True)
trades = db.relationship('Trade', secondary=port_trades, backref=db.backref('trades', lazy='dynamic'))
def __repr__(self):
return '[%r,%r,%r,%r]' % (self.user_id, self.portfolio_id, self.portfolio_name, self.trade_id)
class Trade(db.Model):
__tablename__ = 'trade'
trade_id = db.Column(db.Text, primary_key=True)
user_id = db.Column(db.Text, primary_key=True)
instrument = db.Column(db.Text)
trade_type = db.Column(db.Text, primary_key=True)
product_name = db.Column(db.Text)
portfolios = db.relationship('Portfolio', secondary=port_trades, backref=db.backref('portfolios', lazy='dynamic'))
def __repr__(self):
return '[%r,%r,%r,%r]' % (self.trade_id, self.instrument, self. trade_type, self. product_name)
现在我可以使用:
port = Portfolio.query.filter_by(portfolio_id=portfolio_id).all()
要获取具有特定portfolio_id的端口,
但如何从交易表中获取所有交易细节(交易类中的所有属性)
for example these two tables like this:
-----portfolio_id ----- trade_id
1 2
1 3
1 4
谢谢您的帮助。在这里和那里更改了几行,但请随意更改回您所拥有的内容。但不要更改lazy=“joined”部分,因为在查询对象中包含所有相关对象是关键
port_trades = db.Table(
'port_trades',
db.Column('portfolio_id', db.Integer(), db.ForeignKey('portfolio.portfolio_id')),
db.Column('trade_id', db.Integer(), db.ForeignKey('trade.trade_id'))
)
class Portfolio(db.Model):
__tablename__ = 'portfolio'
user_id = db.Column(db.Text, primary_key=True)
portfolio_id = db.Column(db.Text, primary_key=True)
portfolio_name = db.Column(db.Text)
trade_id = db.Column(db.Text, primary_key=True)
def __repr__(self):
return '[%r,%r,%r,%r]' % (self.user_id, self.portfolio_id, self.portfolio_name, self.trade_id)
class Trade(db.Model):
__tablename__ = 'trade'
trade_id = db.Column(db.Text, primary_key=True)
user_id = db.Column(db.Text, primary_key=True)
instrument = db.Column(db.Text)
trade_type = db.Column(db.Text, primary_key=True)
product_name = db.Column(db.Text)
portfolios = db.relationship('Portfolio', secondary=port_trades, backref=db.backref('portfolios', lazy='joined'))
def __repr__(self):
return '[%r,%r,%r,%r]' % (self.trade_id, self.instrument, self. trade_type, self. product_name)
尝试使用下面的查询查询多对多。别忘了写“c”
query_port_trades = Trade.query.join(port_trades).join(Portfolio).
filter(port_trades.c.trade_id == Trade.id and port_trades.c.portfolio_id == Portfolio.id).all()
非常感谢你。我以为没人会给这个问题贴答案…,非常感谢。