sqlalchemyを使用してクエリを作成していますが、これは実行されていないと思っています。データベース/ ormを使用する方法ではありません。sqlalchemyとの結合関係をフィルタリングする
これは私のスキーマの簡易版である:
class User(Base):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
longs = db.relationship('Login', backref='users')
class Login(Base):
__tablename__ = 'logins'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
browser = db.Column(db.String(64)
私はAを参照するBの行数があることを考えると状態、などのすべての要素のために、持っていると思います Aは、ユーザー Bのリストには、ログインのリストです:
一定数未満、のは、このことを想像し、実際のケース5.をしましょう
Firefoxで5回未満ログインしたすべてのユーザーのリストを取得したいと思います。ログインしていないユーザーも含まれます!
SQL/SQLAlchemyのでは、私はこの方法でこれを行うだろう:
1)選択行を、すべての
never_loggedin = session.query(User).join(Login,
Logins.user_id == User.id).\
filter(Login.user_id == None)
2)選択のログインでログインしていないこと、左結合を使用してFirefoxの場合は、5未満の数を取るだけです。
sub_query = session.query(Login).filter(Login.browser ==
browser).subquery()
less_ex = session.query(User).outerjoin(sub_query,
sub_query.c.user_id ==
User.id).group_by(sub_query.c.user_id).having(func.count(User.id) <
repetition)
3)今問題があります。ログインしたユーザーはFirefoxでは絶対に使用されないかもしれませんが、それらは前のクエリから選択されていない可能性があります。私はそれらを選ぶ方法を知らない。
私は正しく進めていますか?具体的には、多対多の関係を使用する必要があったはずですが、ソフトウェアの次の要素を追加してこの編集を行うつもりです。
ハム..おそらく選択と「選択しない」選択が解決策になるかもしれません... – asdf