ODBC を使用したデータの読み取り
このチュートリアルでは、ODBC を使用して基本的なクエリ コマンドを実行する方法を学習します。ここでは、CRUD データベース操作の Read(読み取り)部分について説明します。
先のチュートリアルで作成した接続文字列と ZENDB データベースを使用して、右側(このページの内容)に挙げたトピックの手順を進めます。
SELECT を使用してテーブル内のすべてのレコードを読み取る
簡単な例は、SQL SELECT ステートメントを使用して、テーブルからすべてのデータを選択することです。
c.execute("SELECT * FROM Students")
SELECT 句を使用すると、テーブルからデータを読み取ることができます。アスタリスクは、各行のすべての列を照会するワイルドカードです。関心のある特定の列の名前のみを選択することもできます。
コマンドを実行した後、pyodbc から cursor API を使用してデータにアクセスできます。
for row in c.fetchall(): print(row)
次の内容が表示されます。
(1, 'John ', 100) (2, 'Mary ', 200) (3, 'Bob ', 300) (4, 'Amy ', 400) (5, 'Sam ', 500) (6, 'Jill ', 600)
各行が 1 つのレコードで、テーブルに定義されているすべての列を含んでいます。
- Id は、新しいレコードごとにインクリメントされます
- Name は、スペースを含めて 32 文字です
- Account_Balance は、指定された値を持ちます
WHERE を使用して条件を指定する
SELECT クエリで、特定の条件を追加して、テーブルの結果をフィルター処理することができます。
c.execute("SELECT * FROM Students WHERE Account_Balance > 300") for row in c.fetchall(): print(row)
WHERE 句を使用すると、レコードを検索するときに従うクエリの条件を作成できます。この場合は、Account_Balance の値が 300 より大きいレコードがすべて表示されています。
(4, 'Amy ', 400) (5, 'Sam ', 500) (6, 'Jill ', 600)
詳細:
ORDER BY を使用してレコードを並べ替える
WHERE 句と一緒に ORDER BY 句も使用すると、SELECT クエリで返されるデータを並べ替えることができます。
c.execute("SELECT * FROM Students ORDER BY Name") for row in c.fetchall(): print(row)
結果では、レコードは学生の名前のアルファベット順に表示されます。次のような表示になります。
(4, 'Amy ', 400) (3, 'Bob ', 300) (6, 'Jill ', 600) (1, 'John ', 100) (2, 'Mary ', 200) (5, 'Sam ', 500)
詳細:
CREATE VIEW を使用してクエリを保存する
ビューは、データベース内のデータを調べるためのもう 1 つのメカニズムです。ビューは、SQL ステートメントの結果から作成された仮想テーブルです。
それについて検討するもう 1 つの方法は、名前付きの SELECT 句を保存することです。ビューの名前を使用することにより、後で戻ることができます。
ビューを作成するために、CREATE VIEW ステートメントを使用します。
c.execute("CREATE VIEW Almost_Empty_Balance(Id, Account_Balance) AS SELECT Id, Account_Balance from Students WHERE Account_Balance < 200")
これは、Account_Balance が 200 未満の学生をすべて表示する、Almost_Empty_Balance という名前のビューを作成します。
Zen Control Center で[ビュー]の下を見ると、新しい Almost_Empty_Balance というビューが表示されています。これは、Account_Balance が 200 未満の全学生を含んでいます。
Python でビューを読み取ることは、テーブルからレコードを読み取ることと同じです。
c.execute("SELECT * FROM Almost_Empty_Balance") for row in c.fetchall(): print(row)
これは 1 件のレコードと、元の CREATE VIEW ステートメントで指定された Id 列および Account_Balance 列のみを返します。
(1, 100)
詳細: