実際のプログラミングでは、さまざまな条件に基づいてデータベースのレコードをクエリする必要がありますが、SQLAlchemy のクエリ条件はフィルターと呼ばれます。最も一般的に使用されるフィルターのリストを次に示します。
1. 等価フィルター (==)
等価フィルターは、列が特定の値に等しいかどうかを判断するために使用され、最も一般的に使用されるフィルターです。
session.query(Account).filter(Account.user_name=='Mark') #判断字符串类型 session.query(Account).filter(Account.salary==2000) #判断数值类型
2. 等しくないフィルタ (!=、<、>、<=、>=)
等しくないフィルタとの関係フィルタ、等しくないフィルタは、次のようないくつかの形式に拡張できます: 等しくない、より小さい、より大きい、以下、または等しい。
session.query(Account).filter(Account.user_name !="mark" ) #不等于字符串类型 session.query(Account).filter(Account.salary !=2000) #不等于数值类型 session.query(Account).filter(Account.salary >2000) #大于过滤器 session.query(Account).filter(Account.salary <2000) #小于过滤器 session.query(Account).filter(Account.salary <=2000) #小于等于过滤器 session.query(Account).filter(Account.salary >=2000) #大于等于过滤器
3. ファジー クエリ (例)
ファジー クエリは、クエリされた文字列の内容の一部しかわかっていない場合に適しています。ワイルドカードを使用すると、さまざまな結果をクエリできます。ワイルドカードはパーセント記号 % で表されます。
テーブル内のデータが次のとおりであると仮定します:
id | user_name | title | 給与 |
---|---|---|---|
1 | David Li | システムマネージャー | 3000 |
2 | デベッカ・リー | 会計士 | 3000 |
3 | デイビッド・バッカー | エンジニア | 3000 |
4 | シーモン ボンド | エンフィナー | 4000 |
5 | Van Berg | ゼネラルマネージャー | NULL |
#查询所有名字包含字母i的用户,结果包括id为1、2、3、4的4条记录 session.query(Account).filter(Account.user_name.like('%i%')) #查询所有title中以Manager结尾的用户,结果包括id为1、5的两条记录 session.query(Account).filter(Account.title.like('%Manager')) #查询所有名字中以Da开头的用户,结果包括id为1、3的两条记录 session.query(Account).filter(Account.user_name.like('Da%'))
注意 : ファジー クエリはクエリ文字列タイプにのみ適用でき、数値タイプには適用できません。
4. フィルター (in_) を含める
クエリ対象のレコードのフィールド コンテンツは正確にわかっているが、クエリ対象のフィールドに複数のコンテンツがある場合、「含む」フィルターを使用できます。
#查询id不为1,3,5的记录,结果包含id为2,4的两条记录 session.query(Account).filter(~Account.id.in_([1,3,5])) #查询工资不为2000、3000、4000的记录,结果包含id为5的1条记录 session.query(Account).filter(~Account.id.in_([2000,3000,4000])) #查询所有title不为Engineer和Accountant记录,结果包括id为1、5的两条记录 session.query(Account).filter(~Account.title.in_(['Accountant','Engineer']))
5. 空かどうかを判断します (NULL であるか、NULL ではありません)
空の値 NULL は、データベース フィールドの特別な値です。 SQLAlchemy は、フィールドが空かどうかの判断をサポートしています。判定する場合は、等しい値フィルタと不等値フィルタを使用してフィルタリングすることも、is と isnot を使用してフィルタリングすることもできます。
#查询salary为空值的记录,结果包含id为5的记录 #下面两方式效果相同 session.query(Account).filter(Account.salary==None) session.query(Account).filter(Account,salary.is_(None)) #查询salary不为空值的记录,结果包含id为1、2、3、4的记录 #下面两方式效果相同 session.query(Account).filter(Account.salary!=None) session.query(Account).filter(Account.salary.isnot(None))
6. 非論理 (~)
特定の条件を満たさないレコードをクエリする必要がある場合は、非論理を使用できます。
#查询id不为1、3、5的记录,结果包含id为2、4的两条记录 session.query(Account).filter(~Account.id.in_([1,3,5])) #查询工资不为2000、3000、4000的记录,结果包含id为5的1条记录 session.query(Account).filter(~Account.id.in_([2000,3000,4000])) #查询所有title不为Engineer和Accountant的记录,结果包括id为1、5的2条记录。 session.query(Account).filter(~Account.title.in(['Accountant','Engineer']))
7. AND ロジック (and_)
複数の条件を満たすレコードを同時にクエリする必要がある場合は、AND ロジックを使用する必要があります。 SQLAlchemy でロジックを表現するには 3 つの方法があります。
次の 3 つのステートメントのクエリ結果は同じで、すべて ID 3 のレコードです。
#直接在filter中添加多个条件即表示与逻辑 session.query(Account).filter(Account.title=='Engineer',Account.salary=3000) #用关机子and_进行逻辑查询 from sqlalchemy import and_ session.query(Account).filter(and_(Account.title=='Engineer',Account.salary=3000)) #通过多个filter的链接表示与逻辑 session.query(Account).filter(Account.title=='Engineer').filter(Account.salary=3000)
8、or ロジック (or_)
複数の条件をクエリする必要があるが、条件のうち 1 つだけを満たす必要がある場合は、 or ロジックを使用する必要があります。 。
rreeee以上がPythonプログラミングでSQLAlchemyクエリ条件を設定する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。