我来自Django世界,从未有过“backrefs”。我所做的就是定义ForeignKey。
就是这样。
为什么我会使用backref?
答案 0 :(得分:4)
要了解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:ababab@localhost/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))
这是一个非常简单的例子。现在,如果您想要访问user
的{{1}},那么您可以直接从addresses
属性获取user_id
模型。这将返回addresses
的{{1}}。
如果您想要id
与此user
相关联的对象,则必须使用user
方法addresses
。
现在反过来说如果你想访问user_id
的{{1}}那么你必须运行像
addresses
但是如果您将使用user
,那么当您访问该属性时,sqlalchemy将运行此查询。
现在在我们的示例中,如果您将访问SELECT * FROM addresses WHERE user_id = $1
,那么它将运行查询
backref
userobject.addresses
模型中没有SELECT * FROM addresses WHERE user_id = userobject.id
这样的属性,这将由addresses
模型的User
属性backref
设置。 强> 的