📜  sqlalchemy 一对一外键 - Python (1)

📅  最后修改于: 2023-12-03 15:35:06.945000             🧑  作者: Mango

SQLAlchemy 一对一外键

在SQLAlchemy中,一对一的关联可以使用外键来定义。本文将介绍如何使用SQLAlchemy创建一对一关联的外键。

创建表

在此之前,我们首先需要创建一些表,以便后面进行一对一外键的定义和查询。我们将创建两个表,One和Two,它们之间的关系是一对一。

from sqlalchemy import create_engine, Column, String, Integer, ForeignKey
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class One(Base):
    __tablename__ = 'one'
    id = Column(Integer, primary_key=True)
    two_id = Column(Integer, ForeignKey('two.id'))
    two = relationship('Two', backref=backref('one', uselist=False))

class Two(Base):
    __tablename__ = 'two'
    id = Column(Integer, primary_key=True)

在上面的代码中,我们定义了两个表:One和Two。在One表中,我们定义了一个外键two_id,它是指向Two表中的id列的。我们还定义了一个关系two,它引用了该外键,并且使用了backref来为Two表定义了一个反向关系one

在Two表中,我们只定义了一个id列,并且没有定义任何关系。

定义外键

现在,我们已经定义了两个表,接下来我们需要定义外键来连接这两个表。我们可以使用SQLAlchemy的ForeignKey关键字来定义外键。在我们的例子中,One表的two_id列就是一个外键,它指向Two表中的id列。

class One(Base):
    __tablename__ = 'one'
    id = Column(Integer, primary_key=True)
    two_id = Column(Integer, ForeignKey('two.id'))
    two = relationship('Two', backref=backref('one', uselist=False))

通过上面的代码,我们定义了two_id列是一个外键,并且指向了Two表中的id列。我们还在relationship()中定义了反向关系,使得我们在访问One对象时,可以方便地访问到对应的Two对象。

查询数据

现在,我们已经定义了一对一关系的外键,接下来我们可以查询数据,并且通过外键来获取它们的关联对象。

session.query(One).join(Two).filter(Two.id == 1).first()

在上面的代码中,我们使用join()来将One和Two表连接起来。然后,我们使用filter()来获取对应的关联对象,这里我们使用了Two.id==1来获取id为1的Two对象,然后通过first()获取第一个匹配的One对象。

结论

在本文中,我们介绍了如何使用SQLAlchemy创建一对一关系的外键。通过使用外键,我们可以轻松地定义表之间的关系,以及方便地查询和访问它们。