gpt4 book ai didi

python - 简单的 SQLAlchemy 关系如何工作?

转载 作者:IT老高 更新时间:2023-10-28 22:18:21 25 4
gpt4 key购买 nike

我不是数据库专家——我只知道基础知识,真的。我为一个小项目选择了 SQLAlchemy,我使用的是声明性基本配置,而不是“正常”方式。这种方式看起来简单多了。

但是,在设置我的数据库架构时,我意识到我不了解一些数据库关系概念。

如果我之前有一个多对一的关系,例如作者的文章(每篇文章只能由一个作者撰写),我会在我的文章栏。但是 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 = #?

我认为 ? 应该替换为 Column(Integer, ForeignKey('users.id')),但我不确定 - 我是否可以需要将 openids = relationship("OpenID", backref="users") 放在 Users 类中吗?为什么?它有什么作用?什么是反向引用?

最佳答案

是的,您需要 user_id = Column(Integer, ForeignKey('users.id'))user_id = Column(Integer, ForeignKey('users.id'), nullable= False) 如果它是强制性的。这在底层数据库模式中直接转换为 FOREIGN KEY,没有魔法。

声明关系的简单方法是 OpenID 类中的 user = relationship(Users)。您也可以在 Users 类中使用 users = relationship('OpenID')backref 参数允许你用一个声明来声明两个关系:这意味着在相关类中自动安装反向关系。我个人更喜欢将 backref-s 仅用于自引用关系。原因是我喜欢 self 记录的代码:当您查看它的定义时,您会看到所有已定义的属性,而使用 backref 您需要查看其他类(可能在其他模块中定义)。

关于python - 简单的 SQLAlchemy 关系如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2917866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com