我的flask应用程序中具有以下SQLAlchemy模型:
class User(UserMixin,db.Model):
__tablename__ = "users"
# relationships
instruments = db.relationship(
Instrument,backref="instruments",passive_deletes=True,lazy="dynamic"
)
transactions = db.relationship(
Transaction,backref="transactions",lazy="dynamic"
)
round_trips = db.relationship(
RoundTrip,backref="round_trips",lazy="dynamic"
)
# columns
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(24),unique=True,index=True)
class Instrument(db.Model):
__tablename__ = "instruments"
# relationships
user = db.relationship("User")
transaction = db.relationship(
Transaction,uselist=False,backref="transaction",passive_deletes=True
)
# columns
id = db.Column(db.Integer,primary_key=True)
user_id = db.Column(
db.Integer,db.ForeignKey("users.id",onupdate="CASCADE",ondelete="CASCADE"),index=True,nullable=False,)
symbol = db.Column(db.String(100),index=True)
class Transaction(db.Model):
__tablename__ = "transactions"
# relationships
user = db.relationship("User")
instrument = db.relationship("Instrument")
transaction_round_trip_mapping = db.relationship(
"RoundTripTransactionmapping",backref="round_trip_mappings",lazy="dynamic",)
# columns
id = db.Column(db.Integer,)
instrument_id = db.Column(
db.Integer,db.ForeignKey("instruments.id",)
amount = db.Column(db.Float,nullable=False)
class RoundTrip(ResourceMixin,db.Model):
__tablename__ = "round_trips"
# relationships
user = db.relationship("User")
transaction_round_trip_mapping = db.relationship(
"RoundTripTransactionmapping",backref="transaction_mappings",)
class RoundTripTransactionmapping(db.Model):
__tablename__ = "round_trip_transaction_mappings"
# relationships
round_trip = db.relationship("RoundTrip")
transaction = db.relationship("Transaction")
# columns
id = db.Column(db.Integer,primary_key=True)
round_trip_id = db.Column(
db.Integer,db.ForeignKey("round_trips.id",)
transaction_id = db.Column(
db.Integer,db.ForeignKey("transactions.id",)
closing_transaction = db.Column(db.Boolean,nullable=False)
一个User
可以有一个或多个Transaction
。 User
可以有一个或多个Instrument
。 Transaction
可以有一个Instrument
。一个RoundTrip
可以有一个或多个Transaction
。
RoundTripTransactionmapping
模型只是一个映射表,用于将RoundTrip
绑定到一个或多个Transactions
。
我想用RoundTrip
查询所有Instrument.symbol == "GOOG"
。
如何使用SQLAlchemy的ORM做到这一点?
(我什至还没有正确定义这些关系?对此我有点迷茫。)