日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python sqlalchemy orm 多外键关联

發(fā)布時間:2023/12/20 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python sqlalchemy orm 多外键关联 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

注:在兩個表之間進行多外鍵鏈接

?

如圖:

?

案例:

# 創(chuàng)建兩張表并添加外鍵主鍵

# 調(diào)用Column創(chuàng)建字段 加類型 from sqlalchemy import Integer, ForeignKey, String, Column# 調(diào)用基類Base from sqlalchemy.ext.declarative import declarative_base# 調(diào)用操作鏈接,反查 from sqlalchemy.orm import relationship# 調(diào)用鏈接數(shù)據(jù)庫 from sqlalchemy import create_engineBase = declarative_base()class Customer(Base):__tablename__ = 'customer'id = Column(Integer, primary_key=True)name = Column(String(64))# 以Address表id字段 設(shè)置兩個外鍵billing_address_id = Column(Integer, ForeignKey("address.id"))shipping_address_id = Column(Integer, ForeignKey("address.id"))# relationship -允許你在Student表里通過backref字段反向查出所有它在表里的關(guān)聯(lián)項-# foreign_keys=綁定外鍵 多次relationship 反差會識別不出指定數(shù)據(jù)所以添加foreign_keys參數(shù)。billing_address = relationship("Address",foreign_keys=[billing_address_id])shipping_address = relationship("Address",foreign_keys=[shipping_address_id])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# encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.100/xiang",encoding='utf-8',#echo=True )#---------------1.創(chuàng)建表-----------------# # 創(chuàng)建表結(jié)構(gòu) Base.metadata.create_all(engine) #---------------------------------------#

?

# 插入表內(nèi)字段數(shù)據(jù),測試訪問

from www import orm_fk from sqlalchemy.orm import sessionmaker# bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=orm_fk.engine)# 生成session實例,如同pymysql內(nèi)的cursor Session = Session_class()#---------------2.寫入數(shù)據(jù)-----------------## 寫入數(shù)據(jù) # addr1 = orm_fk.Address(street="Tiantongyuan",city="ChangPing",state="BJ") # addr2 = orm_fk.Address(street="Wudaokou",city="Haidian",state="BJ") # addr3 = orm_fk.Address(street="Yanjiao",city="Langfang",state="HB")# 插入數(shù)據(jù) # Session.add_all([addr1,addr2,addr3])# 寫入數(shù)據(jù) 并調(diào)用 Address字段插入數(shù)據(jù) 為 Customer數(shù)據(jù) # c1 = orm_fk.Customer(name="kevin",billing_address=addr1,shipping_address=addr2) # c2 = orm_fk.Customer(name="Jack",billing_address=addr3,shipping_address=addr3)# 插入數(shù)據(jù) # Session.add_all([c1,c2]) #---------------------------------------##---------------3.查詢數(shù)據(jù)-----------------## 取出Customer內(nèi)的 內(nèi)存對象 obj = Session.query(orm_fk.Customer).filter(orm_fk.Customer.name=="kevin").first()# 通過內(nèi)存 調(diào)用第一行name字段數(shù)據(jù), # 調(diào)用billing_address對應(yīng)外鍵id的對應(yīng)數(shù)據(jù), # 調(diào)用obj.shipping_address對應(yīng)外鍵id的對應(yīng)數(shù)據(jù)。 print(obj.name,obj.billing_address,obj.shipping_address) #---------------------------------------## 執(zhí)行事務(wù) Session.commit() # 表customer +----+-------+--------------------+---------------------+ | id | name | billing_address_id | shipping_address_id | +----+-------+--------------------+---------------------+ | 1 | kevin | 1 | 2 | | 2 | Jack | 3 | 3 | +----+-------+--------------------+---------------------+# 表address +----+--------------+-----------+-------+ | id | street | city | state | +----+--------------+-----------+-------+ | 1 | Tiantongyuan | ChangPing | BJ | | 2 | Wudaokou | Haidian | BJ | | 3 | Yanjiao | Langfang | HB | +----+--------------+-----------+-------+ 數(shù)據(jù)庫測試

?

轉(zhuǎn)載于:https://www.cnblogs.com/xiangsikai/p/8328430.html

總結(jié)

以上是生活随笔為你收集整理的Python sqlalchemy orm 多外键关联的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。