由于你只想查看用户是否存在,因此你不想查询整个对象。只需查询id,如果标量返回不为None,它就存在。
exists = db.session.query(User.id).filter_by(name='davidism').scalar() is not None
SELECT user.id AS user_id
FROM user
WHERE user.name = ?
你显示的第二个查询也可以正常工作,Flask-sqlAlchemy不会阻止sqlAlchemy进行任何类型的查询。这将返回False
或True
而不是None
上面的id,但是它稍微贵一点,因为它使用了子查询。
exists = db.session.query(db.exists().where(User.name == 'davidism')).scalar()
SELECT EXISTS (SELECT *
FROM user
WHERE user.name = ?) AS anon_1