我不是数据库专家 - 我只是知道基础,真的。我已经选择了一个小项目的SQLAlchemy,并且我正在使用声明性的基本配置,而不是“正常”的方式。这种方式似乎简单得多。简单的SQLAlchemy关系如何工作?
但是,在设置我的数据库模式时,我意识到我不理解某些数据库关系概念。
如果我之前有过多对一的关系,例如作者的文章(每篇文章只能由一位作者撰写),我会在我的articles
列中添加一个author_id
字段。但是SQLAlchemy有这个ForeignKey对象,并且有一个与backref kwarg的关系函数,我不知道它有什么意思。
我很害怕找出与中间表的多对多关系(当我需要关于每个关系的附加数据时)。
有人能为我揭开这个秘密吗?现在我正在设置允许我的应用程序使用openID auth。所以,我有这样的:
from __init__ import Base
from sqlalchemy.schema import Column
from sqlalchemy.types import Integer, String
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String, unique=True)
email = Column(String)
password = Column(String)
salt = Column(String)
class OpenID(Base):
__tablename__ = 'openid'
url = Column(String, primary_key=True)
user_id = #?
我认为?
应该Column(Integer, ForeignKey('users.id'))
更换,但我不知道 - 做我需要把openids = relationship("OpenID", backref="users")
在用户类?为什么?它有什么作用?什么是backref?
很好的答案,谢谢。我有点惊讶,它花了这么长时间,没有人回答...似乎很多人会知道的。哦,好:) – 2010-05-27 04:33:37
这是一个很好的答案,很清楚。我也喜欢自我记录的代码。为此,从0.5.1开始,SQLAlchemy提供了'backref'的替代方法,它是['back_populates'](http://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm。 relationship.params.back_populates)。该文档提供了进一步的说明和示例:http://docs.sqlalchemy.org/en/latest/orm/backref.html#relationships- backref – iled 2016-01-21 16:50:18