我有一个列表cities = ['Rome', 'Barcelona', 'Budapest', 'Ljubljana']
然后
我有一个sqlalchemy模型,如下所示-
class Fly(Base):
__tablename__ = 'fly'
pkid = Column('pkid', INTEGER(unsigned=True), primary_key=True, nullable=False)
city = Column('city', VARCHAR(45), unique=True, nullable=False)
country = Column('country', VARCHAR(45))
flight_no = Column('Flight', VARCHAR(45))
我需要检查给定cities
列表中的所有值是否都在飞行表中或不使用sqlalchemy。仅当表中存在所有城市时才返回true。即使表中不存在单个城市,我也需要返回false和不存在的城市列表。怎么做?有什么想法/提示/建议吗?我正在使用MYSQL
答案 0 :(得分:2)
一种方法是在给定列表的基础上创建(临时)关系,并从飞行表格中获取与城市之间的设置差异。换句话说,创建列表 1 中的值的并集:
from sqlalchemy import union, select, literal
cities_union = union(*[select([literal(v)]) for v in cities])
然后采取不同的做法:
sq = cities_union.select().except_(select([Fly.city]))
并检查差异后是否没有剩余行:
res = session.query(~exists(sq)).scalar()
对于缺少飞行桌的城市,请省略(不存在):
res = session.execute(sq).fetchall()
1 其他数据库供应商可能会提供从数组产生关系的替代方法,例如Postgresql及其unnest()
。