2
我來自Django世界,從來沒有「backrefs」。我所做的只是定義ForeignKey。在SQLAlchemy中設計我的數據庫模式時,我需要多久使用一次「backrefs」?
就是這樣。
爲什麼我會使用backref?
我來自Django世界,從來沒有「backrefs」。我所做的只是定義ForeignKey。在SQLAlchemy中設計我的數據庫模式時,我需要多久使用一次「backrefs」?
就是這樣。
爲什麼我會使用backref?
對於理解backref請給定的例子
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import Column, Integer, String
from sqlalchemy import Table, Text
engine = create_engine('mysql://root:[email protected]/alctest',
echo=False)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key = True)
name = Column(String(100))
fullname = Column(String(100))
password = Column(String(100))
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key = True)
email_address = Column(String(100), nullable=False)
#foreign key, must define relationship
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", backref = backref('addresses',order_by=id))
這是很簡單的例子。現在如果您想訪問addresses
的user
,那麼您可以直接從user_id
屬性獲得屬性,如果addresses
模型。這將返回user
的id
。
如果您想要與此addresses
關聯的user
的對象,那麼您必須使用get()
方法與user_id
。
現在,在相反的情況下,如果你要訪問的user
的addresses
,那麼你必須像
SELECT * FROM addresses WHERE user_id = $1
運行查詢但是,如果你會使用backref
那麼當您訪問屬性的SQLAlchemy將運行此查詢。
現在在我們的例子還有,如果你將訪問userobject.addresses
然後它會運行查詢
SELECT * FROM addresses WHERE user_id = userobject.id
有一個在User
模型像addresses
沒有屬性,這將通過backref
從Address
模型user
屬性進行設置。