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)

詳細: