第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么我需要多對(duì)一關(guān)系的關(guān)系和外鍵?

為什么我需要多對(duì)一關(guān)系的關(guān)系和外鍵?

森林海 2021-11-09 13:39:23
在SQLAlchemy for Many to One關(guān)系的文檔中,它顯示了以下示例:class Parent(Base):    __tablename__ = 'parent'    id = Column(Integer, primary_key=True)    child_id = Column(Integer, ForeignKey('child.id'))    child = relationship("Child")class Child(Base):    __tablename__ = 'child'    id = Column(Integer, primary_key=True)許多父母為獨(dú)生子女。那么,當(dāng)我們創(chuàng)建 a 時(shí)Parent,我們需要填充child_idand child,這似乎有點(diǎn)多余?這是強(qiáng)制性的,還是每件事的目的是什么?child = Child()Parent(child_id=child, child=child)此外,在 Flask-SQLAlchemy 中,有一個(gè)簡(jiǎn)單關(guān)系的例子,它創(chuàng)建了一個(gè)像這樣的帖子:Post(title='Hello Python!', body='Python is pretty cool', category=py)不提供category_id. 如果我復(fù)制該場(chǎng)景,則category_id值為None.為了創(chuàng)建像 的新對(duì)象Parent(child=child),添加foreign_keys=[child_id]是否足夠,或者它是否有進(jìn)一步的含義?
查看完整描述

1 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

這不是強(qiáng)制性的;您不需要同時(shí)填充兩者。將外鍵設(shè)置為相關(guān)實(shí)例可能是一個(gè)等待自身出現(xiàn)的錯(cuò)誤。你唯一需要做的就是


child = Child()

parent = Parent(child=child)

在這之后parent.child_id是None,但它們代表ORM的對(duì)象部分就好了。parent.child是對(duì)創(chuàng)建的引用child。除了它們的 Python 對(duì)象 ID 之外,它們還沒(méi)有被持久化到數(shù)據(jù)庫(kù)并且沒(méi)有身份。只有當(dāng)您將它們添加到 aSession并將更改刷新到數(shù)據(jù)庫(kù)時(shí),它們才會(huì)收到身份,因?yàn)樗鼈兪褂蒙傻拇礞I。這是從對(duì)象世界到關(guān)系世界的映射發(fā)生的地方。SQLAlchemy 會(huì)自動(dòng)填寫(xiě)parent.child_id,以便他們的關(guān)系也記錄在數(shù)據(jù)庫(kù)中(注意這不是關(guān)系模型中的“關(guān)系”的意思)。


回到示例,添加一些打印有助于跟蹤發(fā)生的情況和時(shí)間:


child = Child()

parent = Parent(child=child)

print(parent.child_id)  # None

session.add(parent)

session.flush()  # Send changes held in session to DB

print(parent.child_id)  # The ID assigned to child

您也可以顛倒這種情況:您可能擁有現(xiàn)有Child對(duì)象的 ID ,但沒(méi)有實(shí)際對(duì)象的 ID 。在這種情況下,您可以簡(jiǎn)單地分配給child_id自己。


所以,回答標(biāo)題:您不需要 ORMrelationship來(lái)?yè)碛?DB 外鍵關(guān)系,但您可以使用它來(lái)將 DB 關(guān)系映射到對(duì)象世界。


查看完整回答
反對(duì) 回復(fù) 2021-11-09
  • 1 回答
  • 0 關(guān)注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)