私は3つのテーブルを持っています:
(company_id)
主キーを持つCompanyテーブル(company_id, url)
主キーと会社への外部キーを含むページテーブル(company_id, attr_key)
主キーと会社への外部キーを含むAttrテーブル。
私の質問は、Attrの既存の列を使用して、AttrからPageに戻るManyToOneリレーションを構築する方法company_id
ですurl
。
from elixir import Entity, has_field, setup_all, ManyToOne, OneToMany, Field, Unicode, using_options
from sqlalchemy.orm import relation
class Company(Entity):
using_options(tablename='company')
company_id = Field(Unicode(32), primary_key=True)
has_field('display_name', Unicode(255))
pages = OneToMany('Page')
class Page(Entity):
using_options(tablename='page')
company = ManyToOne('Company', colname='company_id', primary_key=True)
url = Field(Unicode(255), primary_key=True)
class Attr(Entity):
using_options(tablename='attr')
company = ManyToOne('Company', colname='company_id', primary_key=True)
attr_key = Field(Unicode(255), primary_key=True)
url = Field(Unicode(255)) #, ForeignKey('page.url'))
# page = ManyToOne('Page', colname=["company_id", "url"])
# page = relation(Page, backref='attrs', foreign_keys=["company_id", "url"], primaryjoin=and_(url==Page.url_part, company_id==Page.company_id))
私はいくつかの失敗した試みをコメントアウトしました。
最終的に、Attr.company_idは、PageとCompanyの両方に対する外部キー(およびAttrの主キー)である必要があります。
これは可能ですか?