2013-12-12 35 views
2

SQLAlchemy涉及的語法問題。數據庫關係 - 語法

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) 

爲什麼它是ForeignKey('child.id')而不是ForeignKey(「Child.id」)? 爲什麼它關係(「孩子」)而不是關係(「孩子」)?關於數據庫和SQLAlchemy如何工作,我不明白這是爲什麼我不得不問這個問題的原因是什麼?謝謝!

回答

2

relationship(Child)也是有效的。通過在字符串內部大寫,sqlalchemy將查找相應的模型。

關係不是sql標準,因此SQLAlchemy使用自己的約定,而ForeignKey是SQL標準,因此使用tablename.column

2

一般:A relationship定義在orm級別,而ForeignKey代表數據庫模型。現在,很有可能是sqlalchemy足夠聰明,可以從另一個角度來看,但如果你牢記這種分離,那麼你是安全的。

具體到您的問題:只需閱讀文檔。提取下方(逐字)

參數 - 映射類,或實際映射器例如,表示的關係的 目標。

參數也可被作爲在映射器初始化時計算 一個可調用的函數傳遞,並且使用聲明時可以作爲Python的評估 串傳遞。

- 爲對鍵關係的單個目標列。列 對象或列名稱爲字符串tablename.columnkeyschema.tablename.columnkeycolumnkey是 分配給該列的關鍵字(默認爲列名本身),除非 link_to_name爲True,在這種情況下,列的呈現名稱爲 。