Car*_*ers 26 python database-design sqlalchemy
我不是数据库专家 - 我真的知道基础知识.我已经为一个小项目选择了SQLAlchemy,我使用的是声明式基本配置,而不是"正常"方式.这种方式似乎更简单.
但是,在设置我的数据库模式时,我意识到我不了解一些数据库关系概念.
如果我之前有多对一的关系,例如作者的文章(每篇文章只能由一位作者撰写),我会author_id在我的articles专栏中添加一个字段.但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 = #?
Run Code Online (Sandbox Code Playgroud)
我认为?应该替换为Column(Integer, ForeignKey('users.id')),但我不确定 - 我是否需要放入openids = relationship("OpenID", backref="users")Users类?为什么?它有什么作用?什么是backref?
Den*_*ach 41
是的,您需要user_id = Column(Integer, ForeignKey('users.id'))或user_id = Column(Integer, ForeignKey('users.id'), nullable=False)是否必须.这直接转换为底层数据库模式中的FOREIGN KEY,没有什么神奇之处.
声明关系的简单方法是user = relationship(Users)在OpenID课堂上.你也可以users = relationship('OpenID')在Users课堂上使用.backref参数允许您使用单个声明声明两个关系:它表示在相关类中自动安装向后关系.我个人更喜欢只使用backref-s作为自我介绍关系.原因是我喜欢自我记录的代码:当你查看它的定义时,你会看到所有定义的属性,而backref你需要查看其他类(可能在其他模块中定义).
| 归档时间: |
|
| 查看次数: |
9638 次 |
| 最近记录: |