我尝试使用Flask + SQLAlchemy实现以下功能: 我有两个数据库模型,包含有关蜜蜂蜂房和蜂箱的信息。我想添加功能以某种方式将它们连接到Sensor模型。这些可以附在一个蜂房或一个蜂箱上。这就是我所拥有的。
class Apiary(db.Model):
__tablename__ = 'apiary'
# ... fields ...
beehives = db.relationship("BeeHive", backref=db.backref('apiary', lazy='dynamic'), lazy='dynamic')
class BeeHive(db.Model)
__tablename__ = 'beehive'
# ... fields ...
apiary_id = db.Column(db.Integer(), db.ForeignKey('apiary.id'))
class SensorType(db.Model):
__tablename__ = 'sensor_type'
id = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.Unicode(32), unique=True)
sensors = db.relationship('Sensor', backref=db.backref('sensor_type', lazy='dynamic'), lazy='dynamic')
class Sensor(db.Model):
__tablename__ = 'sensor'
id = db.Column(db.Integer(), primary_key=True)
serial = db.Column(UUID(), unique=True)
sensor_type_id = db.Column(db.Integer(), db.ForeignKey('sensor_type.id'))
readings = db.relationship('SensorReading', backref=db.backref('sensor', lazy='dynamic'), lazy='dynamic')
class SensorReading(db.Model):
__tablename__ = 'sensor_reading'
id = db.Column(db.BigInteger(), primary_key=True)
value = # TODO
timestamp = db.Column(db.DateTime(), default=db.func.now())
我在互联网上浏览,阅读SQLAlchemy文档并发现了一些关于"多态加载"。我很好地感觉这可能是我正在寻找的,但我不知道如何在我的情况下实现它。我在" Django world"中看到过类似的东西。他们称之为" GenericForeignKey"。
更新:我找到了有关此类关联的SQLAlchemy examples。任何人都可以告诉我哪些是最佳方法? discriminator_on_related,generic_fk,table_per_association或table_per_related?在进一步扩大应用程序中哪一个最难以解决?级联删除?
答案 0 :(得分:1)
经过两天的实验,我得出了最终结论。示例来自this来源。
"关联的判别者" (答案的候选人):
"通用外键":
"每个协会的表格":
"每个相关的表格#34; (答案的候选人):
回答:"关联的判别者"因为传感器没有叠加能力,因此不需要多个父母。