検索
ホームページバックエンド開発Python チュートリアルPython ORM フレームワーク SQLAlchemy の学習ノート データ クエリの例

初期段階で十分な準備を行ったので、重要なコンテンツの 1 つであるクエリを実行します。もちろん、これまでの記事にはクエリに関する内容が多少なりとも散りばめられています。 Query) オブジェクトは、セッションの query() メソッドから取得されたセッションを介して渡されます。このメソッドのパラメーターの数は可変であることに注意してください。つまり、パラメーターの型をいくつでも渡すことができます。クラスまたはクラスの名前の任意の組み合わせを指定できます。次の例では、この点を示しています。Query オブジェクトに User インスタンスをロードさせます。

コードをコピー コードは次のとおりです。

>>> たとえば、session.query(User) .order_by( User.id):
... インスタンス名、インスタンス名を出力
SELECT users.id AS users_id、
users.name AS users_name、
users.fullname AS users_fullname、
users.password AS users_password
FROM users ORDER BY users.id
()

ed Ed Jones
wendy Wendy Williams
mary Mary Contrary
fred Fred Flinstone

もちろん、この例を通じて、Query オブジェクトが一連の反復可能な User インスタンス テーブルを返し、for in ステートメントを通じてそれにアクセスすることがわかります。たとえば、ここでは「user name」instance.name を出力できます。および「ユーザーのフルネーム」の順。最後に .order_by(User.id) があることに気づくかもしれません。これは SQL ステートメントと同じで、User.id によってマップされたテーブル列によって結果セットを並べ替えるよう指示します。

オブジェクト インスタンスの他の属性に興味がない場合は、「ユーザー名」と「ユーザーのフルネーム」のみが必要であるとします。もちろん、ここでの前提条件は次のとおりです。 ORM によってマップされると、いつでも任意の数のクラス エンティティまたは列ベースのエンティティを query() メソッドのパラメータとして使用でき、もちろん最終的な Query オブジェクトはタプル タイプを返します。

コードをコピー コードは次のとおりです。

>>> session.query の名前、フルネーム( User.name , User.fullname):
... 名前、フルネームを表示
SELECT users.name AS users_name,
users.fullname AS users_fullname
FROM users
()

ed Ed Jones
wendy Wendy Williams
mary Mary Contrary
fred Fred Flinstone
返されたタプル型は、通常の Python オブジェクトとみなすこともできます。属性名と型。名前は次の例のように型名に属します。
コードをコピーします。 コードは次のとおりです。

>>> session.query(User, User.name).all() の行:
... print row.User, row.name
SELECT users.id AS users_id,
users.name AS users_name,
users.fullname AS users_fullname,
users.password AS users_password
FROM users
()

ed
ウェンディ
mary
fred
もちろん、次のようなカスタマイズも可能です。 label() メソッドを使用して別の列式の名前を変更する場合と同様です。もちろん、このメソッドはエンティティ テーブル (User.name など) にマップされた列要素オブジェクト (ColumnElement 派生) にのみ存在します:
コードをコピー コードは次のとおりです: session.query(User.name.label('name_label) の行の

>>> ')).all():
... print(row.name_label)
SELECT users.name AS name_label
FROM users
()

ed
ウェンディ
mary
fred
クエリ オブジェクトを確認する前に インスタンスはエンティティ クラスのフル ネーム (User) をパラメータとして複数回使用する必要があるとします。クエリ オブジェクト (テーブル接続操作など) の query() を実行し、それに「エイリアス」を指定すると、エイリアスを介してパラメータを渡すことができます:
コードをコピーします コードは次のとおりです:

>>> sqlalchemy.orm からエイリアスをインポート
>>> user_alias = aliased(User, name='user_alias')

>>> ; session.query(user_alias, user_alias.name).all() の行:
... print row.user_alias
SELECT user_alias.id AS user_alias_id,
user_alias.name AS user_alias_name,
user_alias.fullname AS user_alias_fullname,
user_alias.password AS user_alias_password
FROM users AS user_alias
()




< ;User('fred','Fred Flinstone', 'blah')>
MySQL などのデータベースを学習したことのある学生は、LIMIT と OFFSET という 2 つの SQL 操作を知っているかもしれません。レコードの数と位置を制御します。これはデータのページング操作によく使用されます。もちろん、SQLAlchemy の Query オブジェクトはこの種の操作をすでに考えており、Python の配列スライスを通じて簡単に実装できます。 ORDER BY と一緒に使用します:
コードをコピー コードは次のとおりです:

>>> session.query(User) .order_by(User.id)[1:3]:
... print u
SELECT users.id AS users_id,
users.name AS users_name,
users .fullname AS users_fullname,
users.password AS users_password
FROM users ORDER BY users.id
LIMIT ?
(2, 1)



特定の結果をフィルタリングする必要がある場合は、 filter_by() メソッドを使用できます。このメソッドはキーワード パラメータを使用します:
コードをコピー コードは次のとおりです:

> ;>> 名前、session.query(User.name).
... filter_by(fullname='Ed Jones'):
... 名前を出力
SELECT users.name AS users_name FROM users
WHERE users.fullname = ?
('Ed Jones',)

ed
または filter() を使用することでも目的を達成できますが、そうする必要があります。より柔軟な SQL のようなステートメントの式構造を使用していることに注意してください。つまり、比較演算などの Python 独自の演算子を内部で使用できます。
コードをコピー コードは次のとおりです:

>>> session.query(User.name).
... filter(User.fullname=='Ed Jones '):
... 名前を表示
SELECT users.name AS users_name FROM users
WHERE users.fullname = ?
('Ed Jones',)

ed
ここでのユーザーの fullname=='Ed Jones' に注意してください。比較演算が Ed Jones と等しい場合にのみフィルターされます。

もちろん、強力な Query オブジェクトには、連結できるという非常に便利な機能があります。つまり、Query オブジェクトに対する操作の各ステップで Query オブジェクトが返され、同じメソッドを連結することができます。式を形成するために、ユーザー名「ed」とフルネーム「Ed Jones」を使用してユーザーにクエリを実行する場合は、filter() を連続して 2 回直接呼び出すことができます。これは、SQL ステートメントの AND 接続を表します。 🎜>

コードをコピー コードは次のとおりです: session.query(User) のユーザーの
>。
... filter(User .name=='ed').
... filter(User.fullname=='Ed Jones'):
... ユーザーを表示
SELECT users .id AS users_id,
users .name AS users_name,
users.fullname AS users_fullname,
users.password AS users_password
FROM users
WHERE users.name = AND users.fullname = ? ?
('ed', 'Ed Jones')


以下は一般的なものですfilter() を使用したフィルタリング操作:
1. 等価


コードをコピーします コードは次のとおりです:query.filter(User.name == 'ed' )
2. 等しくない

コードをコピー コードは次のとおりです:query.filter(User.name) != 'ed')
3. LIKE

コードをコピーします コードは次のとおりです:query.filter (ユーザー名.like('% ed%'))

4. IN
コードをコピーします コードは次のとおりです:

query.filter(User.name.in_ ([' ed', 'wendy', 'jack']))

# クエリ オブジェクトでも動作します:

query.filter(User.name.in_(session.query(User .name) .filter(User.name.like('%ed%'))))
5. 中にはありません
コードをコピーします コードは次のとおりです:
query.filter(~User.name.in_(['ed', 'wendy', 'jack']))
6. 🎜>
コードをコピーします コードは次のとおりです:filter(User.name == None)
7. NULL

コードをコピー コードは次のとおりです:filter(User.name != None)
8. AND

コードをコピー コードは次のとおりです:
from sqlalchemy import and_
filter(and_(User.name == 'ed', User.fullname == 'Ed Jones' ))

# または、filter()/filter_by() を複数回呼び出します
filter(User.name == 'ed')。 filter(User.fullname == 'Ed Jones')
9. OR

コードをコピー コードは次のとおりです:
from sqlalchemy import or_
filter(or_(User .name == 'ed', User.name == 'wendy'))
10. 一致

コードをコピー コードは次のとおりです:
query.filter(User.name.match('wendy'))
match() パラメータの内容はデータベースの背景によって指定されます。 (注: 原文は「The content of the matchparameters are database backend specific.」となっており、この操作の意味がよくわかりません)
今日はこれで終わりです。基本的には拙い翻訳です。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Apr 02, 2025 am 07:12 AM

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター