python orm多外鍵關(guān)聯(lián)

創(chuàng)建表結(jié)構(gòu)orm_multiForeignKey_fk.py文件

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey
from sqlalchemy.orm import sessionmaker,relationship

Base = declarative_base()

class Customer(Base):
    __tablename__ = 'customer'
    id = Column(Integer,primary_key=True)
    name = Column(String)
    billing_address_id = Column(Integer,ForeignKey('address.id'))
    shipping_address_id = Column(Integer, ForeignKey('address.id'))

    billing_address = relationship('Address',foreign_keys = [billing_address_id])
    shipping_address = relationship('Address',foreign_keys = [shipping_address_id])

    def __repr__(self):
        return self.name

class Address(Base):
    __tablename__ = 'address'
    id = Column(Integer,primary_key=True)
    street = Column(String(64))
    city = Column(String(64))
    state = Column(String(64))
    def __repr__(self):
        return self.street
engine = create_engine('sqlite:///F:\軟件下載\自動化測試軟件\pycharmProfessional\workspace\c14\sudentsInfo.db3')
Base.metadata.create_all(engine)

創(chuàng)建數(shù)據(jù)及查詢orm_multiForeignKey_fk_api.py文件:

from day11 import orm_multiForeignKey_fk
from sqlalchemy.orm import sessionmaker

session_class = sessionmaker(bind=orm_multiForeignKey_fk.engine)
session = session_class()

#添加數(shù)據(jù)
# addr1 = orm_multiForeignKey_fk.Address(street = 'street1',city = 'city1',state = 'state1')
# addr2 = orm_multiForeignKey_fk.Address(street = 'street2',city = 'city2',state = 'state2')
# addr3 = orm_multiForeignKey_fk.Address(street = 'street3',city = 'city3',state = 'state3')
# session.add_all([addr1,addr2,addr3])
# c1 = orm_multiForeignKey_fk.Customer(name = 'Tim',billing_address = addr1,shipping_address = addr2)
# c2 = orm_multiForeignKey_fk.Customer(name = 'kite',billing_address = addr3,shipping_address = addr3)
# session.add_all([c1,c2])
# session.commit()

obj = session.query(orm_multiForeignKey_fk.Customer).filter(orm_multiForeignKey_fk.Customer.name == 'Tim').first()
print(obj.name,obj.billing_address,obj.shipping_address)

輸出結(jié)果:

Tim street1 street2

customer表可共用地址表address數(shù)據(jù),通過address中的id關(guān)聯(lián)起來

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容