Python 简单的SQLAlchemy关系是如何工作的?
我不是数据库专家——我只知道基本知识,真的。我为一个小项目学习了SQLAlchemy,我使用的是声明性基本配置,而不是“正常”方式。这种方式似乎简单得多 然而,在设置数据库模式时,我意识到我不理解一些数据库关系概念 如果我以前有多对一关系,例如,作者的文章(每篇文章只能由一位作者撰写),我会在我的Python 简单的SQLAlchemy关系是如何工作的?,python,database-design,sqlalchemy,Python,Database Design,Sqlalchemy,我不是数据库专家——我只知道基本知识,真的。我为一个小项目学习了SQLAlchemy,我使用的是声明性基本配置,而不是“正常”方式。这种方式似乎简单得多 然而,在设置数据库模式时,我意识到我不理解一些数据库关系概念 如果我以前有多对一关系,例如,作者的文章(每篇文章只能由一位作者撰写),我会在我的文章列中放置作者id字段。但是SQLAlchemy有一个ForeignKey对象,还有一个带有backref-kwarg的关系函数,我不知道这是什么意思 我害怕发现与中间表的多对多关系是什么样子(当我需
文章
列中放置作者id
字段。但是SQLAlchemy有一个ForeignKey对象,还有一个带有backref-kwarg的关系函数,我不知道这是什么意思
我害怕发现与中间表的多对多关系是什么样子(当我需要关于每个关系的附加数据时)
有人能帮我解开这个谜团吗?现在我正在设置允许我的应用程序使用openID身份验证。所以我有这个:
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 = #?
我认为
?
应该替换为列(Integer,ForeignKey('users.id'))
,但我不确定——我是否需要将openids=relationship(“OpenID”,backref=“users”)
放在users类中?为什么?它有什么作用?什么是backref?是的,如果强制要求,则需要user\u id=Column(整数,ForeignKey('users.id'))
或user\u id=Column(整数,ForeignKey('users.id'),nullable=False)
。这是直接转换为基础数据库模式中的外键,没有魔力
声明关系的简单方法是
OpenID
类中的user=relationship(Users)
。您还可以在users
类中使用users=relationship('OpenID')
backref
参数允许您使用单个声明声明两个关系:它意味着在相关类中自动安装向后关系。我个人更喜欢使用backref
-s仅用于自我引用关系。原因是我喜欢自文档代码:当您查看它的定义时,您会看到所有已定义的属性,而使用backref
时,您需要查看其他类(可能在其他模块中定义)。回答得很好,谢谢。我有点惊讶它花了这么长时间,没有其他人回答。。。似乎很多人都知道。这是一个很好的答案,非常清楚。我也更喜欢自文档代码。因此,自0.5.1以来,SQLAlchemy提供了一种替代backref
的方法,后者是。这些文件提供了进一步的澄清和示例: