最近两周都在写表定义,遇到一种情况,一张记录用户关心的字段(roi -- region of interest),另一张,记录怎么样用“用户关心的字段”进行二元运算。
表结构:
ROI表:
__table__ = 'roi'
roi_id
...
Formula表:
操作符
roi_left = ...ForeignKey('ROI.id')
roi_right=...ForeignKey('ROI.id')
如果要利用SQLAlchemy的关联关系辅助查询数据,就需要加relationship定义
roi_relationship = relationship("Formula",secondary="roi",primaryjoin="Formula.roi_left == roi.id", secondaryjoin="Formula.roi_right == roi.id")
修改models/core.py之后,用superset db migrate能生成升级脚本,还没有实际查询数据。
如果查询数据遇到问题,再来补充。
其他:
backref为什么叫back?应该是反向的意思,从关系的另一端往回查,就叫back。
sqlalchemy外键和relationship查询 - 金色旭光 - 博客园www.cnblogs.com这篇文章中的例子:
class Company(Base):
14
15 __tablename__ = "company"
16
17 name = Column(String(20),primary_key=True)
18 location = Column(String(20))
19
20 def __repr__(self):
21 return "name:{0} location:{1}".format(self.name,self.location)
22
23 class Phone(Base):
24
25 __tablename__ = "phone"
26
27 id = Column(Integer,primary_key=True)
28 model = Column(String(32))
29 price = Column(String(32))
30 company_name = Column(String(32),ForeignKey("company.name"))
31 company = relationship("Company",backref="phone_of_company")
32
33 def __repr__(self):
34 return "{0} model:{1},sales:{2} sales:{3} price:{4}".format(self.id,self.model,self.sales,self.price)
company = relationship("Company",backref="phone_of_company")
backref的名字和所在类的__tablename__可以不同(我是接触Superset之后才开始了解SQLAlchemy,一直以为backref的名字要和__tablename__的名字相同)。