SQLAlchemy:如果某些记录和关系数据尚不存在,则插入记录
SQLAlchemy: insert record if certain record and relationship data does not already exist
我想知道如何使用多个条件从多个 table 中查询数据。
我的示例数据库具有以下 tables:
class Location(Base):
__tablename__ = "location"
id = Column('id', Integer, primary_key=True)
location = Column('Location', String)
class Person(Base):
__tablename__ = "person"
id = Column('id', Integer, primary_key=True)
name = Column('Name', String, unique=True)
profession = Column('Profession', String)
location_id = Column(Integer, ForeignKey('location.id'))
location = relationship(Location)
我们在此数据库中有一个具有特定位置的人。我的目标是编写一个查询,我可以在其中检查 Location
table 和 Person
table.
的条件
一个名叫埃里克的人住在休斯顿。现在我想知道我的数据库中是否已经有来自休斯顿的 Eric。
以下查询无效。
new_location = Location(location='Houston')
obj = Person(name='Eric', profession='Teacher', location=new_location)
if session.query(Person).filter(Person.name == obj.name,
Person.profession == obj.profession,
Person.location_id == obj.location.id).first() == None:
session.add(obj)
session.commit()
print("Insert sucessful")
我查询中的问题是我检查位置的最后一行,但我不知道如何解决它。也许有人有一个使用 SQLAlchemy 方法的工作示例 exists()
?
您可以执行类似以下操作来加入 Person
和 Location
并过滤名称和位置与您创建的新人员实例相同的任何记录。查询将 return 记录或 None
,因此您可以在 if
中使用结果(请记住缩进很重要 - 也许您问题中的代码示例只是复制不正确)。
new_location = Location(location='Houston')
new_person = Person(name='Eric', profession='Teacher', location=new_location)
person_location_exists = session.query(Person).\
join(Location).\
filter(Person.name == new_person.name).\
filter(Location.location == new_location.location).\
first()
if not person_location_exists:
session.add(new_person)
session.commit()
print("Insert successful")
你可以用exists()
来完成同样的事情,但我认为上面的更简单一些。
我想知道如何使用多个条件从多个 table 中查询数据。
我的示例数据库具有以下 tables:
class Location(Base):
__tablename__ = "location"
id = Column('id', Integer, primary_key=True)
location = Column('Location', String)
class Person(Base):
__tablename__ = "person"
id = Column('id', Integer, primary_key=True)
name = Column('Name', String, unique=True)
profession = Column('Profession', String)
location_id = Column(Integer, ForeignKey('location.id'))
location = relationship(Location)
我们在此数据库中有一个具有特定位置的人。我的目标是编写一个查询,我可以在其中检查 Location
table 和 Person
table.
一个名叫埃里克的人住在休斯顿。现在我想知道我的数据库中是否已经有来自休斯顿的 Eric。
以下查询无效。
new_location = Location(location='Houston')
obj = Person(name='Eric', profession='Teacher', location=new_location)
if session.query(Person).filter(Person.name == obj.name,
Person.profession == obj.profession,
Person.location_id == obj.location.id).first() == None:
session.add(obj)
session.commit()
print("Insert sucessful")
我查询中的问题是我检查位置的最后一行,但我不知道如何解决它。也许有人有一个使用 SQLAlchemy 方法的工作示例 exists()
?
您可以执行类似以下操作来加入 Person
和 Location
并过滤名称和位置与您创建的新人员实例相同的任何记录。查询将 return 记录或 None
,因此您可以在 if
中使用结果(请记住缩进很重要 - 也许您问题中的代码示例只是复制不正确)。
new_location = Location(location='Houston')
new_person = Person(name='Eric', profession='Teacher', location=new_location)
person_location_exists = session.query(Person).\
join(Location).\
filter(Person.name == new_person.name).\
filter(Location.location == new_location.location).\
first()
if not person_location_exists:
session.add(new_person)
session.commit()
print("Insert successful")
你可以用exists()
来完成同样的事情,但我认为上面的更简单一些。