移行フレームワークの外に基づいて
1 demo_class = g.db.query(モデル)に.get (ID)
2等しい等值の
記事= session.query(モデル).filter(model.title == "タイトル")。最初の()
model_table titile == "タイトル" SELECT * FROM
レンジング3等しくない値
記事= session.query(モデル).filter(model.title!= "タイトル")。最初の()
NOT IN 4
記事= session.query(モデル).filter(model.title.in _([ "1"、 "2"]))
記事= session.query(モデル).filter(〜_ model.title.in([ "そこ"、 "4"])
5がnullの
記事= session.query(モデル).filter(model.count ==なし).ALL()
6がnullではない
(artiles = session.query(モデル).filter(model.count!=なし).ALL )
7 SQLAlchemyの輸入and_、or_から
#と
#記事= session.query(条).filter(Article.title == 'ABC'、Article.content == 'ABC')。すべての()
#プリント(記事)
#や
記事= session.query(条).filter(or_(Article.title == 'ABC'、Article.content == 'ABC'))。すべての()
プリント(記事)
あなたは、変換の基礎となるSQL文のORMを見たい場合は、フィルタ法の背後にあるのいずれかの方法を実行することができない、我々は直接印刷を見ることができます。
端的には、アクチュエータなしでのみフィルタを追加した文を実行することです
比如:
`` `Pythonの
記事= session.query(条).filter(or_(Article.title == 'ABC'、Article.content == 'ABC'))
プリント(記事)
`` `
直接印刷ステーションでSQLAlchemyの出力のSQL文の設定項目があります。
SQLALCHEMY_ECHO =真
外部キーを使用します
この比とのForeignKey外部キー関係は十分例ORM比較的単純明快であり、主キーフィールドの親テーブルのフィールド関連する外部キーが一致していることを確実にするためにではなく
この方法は、より激しい長いクエリを使用していません
クラスのユーザー(ベース):
__tablename__ = 'ユーザ
ID =列(整数、PRIMARY_KEY = Trueの場合、自動インクリメント= TRUE)
、ユーザ名=列(文字列(50)、偽= NULL可能)
Articleクラス(ベース):
__tablename__ = 'アーティクル'
ID =列(整数、PRIMARY_KEY = Trueの場合、自動インクリメント=真)
タイトル=列(文字列(50)、NULL可能= Falseの)
コンテンツ=列(テキスト、= FalseのNULL可能)
UID =列(整数、ForeignKeyの( "user.id"))
usre = session.query(ユーザー).filter(User.username == "查询")1次回()
ユーザー= session.query(条).filter(Article.uid == user.id).ALL()
2。SQLAlchemyのが `relationship`を提供し、クラス属性を定義することができ、後に直接関連する属性は、アクセスを介してアクセス可能なテーブルにアクセスするときに得ることができます
クラスWuye(塩基):
__tablename__ = 'ユーザ
ID =カラム(整数、PRIMARY_KEY =真、オートインクリメント= TRUE)
wuye_name =列(文字列(50)= FalseのNULL可能)
#山の手=関係( "アップタウン")
クラスアップタウン(ベース):
__tablename__ = 'アーティクル'
ID =列(整数、PRIMARY_KEY = Trueの場合、自動インクリメント=真)
タイトル=列(文字列(50)、NULL可能= Falseの)
コンテンツ=列(テキスト、偽= NULL可能)
wuye_id =コラム(整数、ForeignKeyの( "user.id"))
Wuye =関係( "Wuye"、後方参照= "山の手")
後方参照の逆属性は、テーブル内の山の手山の手フィールドを追加することであることは、複数Wuye多くの関係です
外部キーを使用します
小さな財産-多く、多くの-にクエリのすべてのセルの現在のクエリを取得します。
アップタウン= session.query(アップタウン).filter(Uptown.wuye_id ==現在のプロパティID).ALL()
wuye = session.query(Wuye).filter(Wuye.status == 0)1次回()
アップタウン= wuye.uptown [0] .ID
基礎となる問合せ
パス
お問い合わせ
Enが参加します
このようにして細胞の数と同じ収集に属するリンクプロパティの存在
山の手= session.qyery(アップタウン).filter(Uptown.wuye_id == Wuye.id).coun()
アップタウン=セッション(UptownModel).join(WuyeModel、UptownModel.wuye_id == WuyeModel.id).count()
外部キーの検索によってデフォルト内のリンク
FROM#(AS uptown_id uptown.id SELECT、uptown.uptown_name AS uptown_uptown_name
アップタウン、wuyeのFROM#
#WHERE uptown.wuye_id = wuye.id)anon_ AS
外部結合します
LEFT OUTER、細胞に対するwuye JOINアウター・ジョイン主プロパティがnull存在しないクエリに関連付けられます
FROM(uptown_uptown_name AS、AS uptown_id uptown.uptown_nameをuptown.id SELECT
アップタウンLEFT OUTER JOIN FROM wuye ON uptown.wuye_id = wuye.id)anon_1 AS
サブクエリのSELECT文では、select文は、別に埋め込まれ、その後、select文が埋め込ま呼ばれるサブクエリ
サブクエリ()は、単に理解ワードクエリ結果は、別のクエリ条件クエリとしてクエリであります
クエリ地区プロパティを存在
wuye_id = g.db.query(WuyeModel.id).filter(WuyeModel.status == 0).subquery()
アップタウン= g.db.query(UptownModel).filter(UptownModel.status == 0、UptownModel.wuye_id.in_(wuye_id))。すべての()
質問
アップタウンFROM
WHERE uptown.status =%(status_1)SおよびIN uptown.wuye_id(wuye.idを選択
wuye FROM
wuye.status =%(status_2)■