Sqlalchemy-core-selecting-rows

提供:Dev Guides
移動先:案内検索

SQLAlchemyコア-行の選択

この章では、テーブルオブジェクトの行を選択する概念について説明します。

テーブルオブジェクトのselect()メソッドを使用すると、SELECT式を*構築できます。

s = students.select()

selectオブジェクトは、以下に示すように、str(s)関数による *SELECTクエリに変換されます-

'SELECT students.id, students.name, students.lastname FROM students'

以下のコードに示すように、接続オブジェクトのexecute()メソッドのパラメーターとしてこのselectオブジェクトを使用できます-

result = conn.execute(s)

上記のステートメントが実行されると、Pythonシェルは同等のSQL式に従ってエコーします-

SELECT students.id, students.name, students.lastname
FROM students

結果の変数は、DBAPIのカーソルと同等です。* fetchone()メソッド*を使用してレコードを取得できます。

row = result.fetchone()

テーブルで選択されたすべての行は、以下に示すように* forループ*で印刷することができます-

for row in result:
   print (row)

学生テーブルからすべての行を印刷する完全なコードを以下に示します-

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()

students = Table(
   'students', meta,
   Column('id', Integer, primary_key = True),
   Column('name', String),
   Column('lastname', String),
)

s = students.select()
conn = engine.connect()
result = conn.execute(s)

for row in result:
   print (row)

Pythonシェルに表示される出力は次のとおりです-

(1, 'Ravi', 'Kapoor')
(2, 'Rajiv', 'Khanna')
(3, 'Komal', 'Bhandari')
(4, 'Abdul', 'Sattar')
(5, 'Priya', 'Rajhans')

SELECTクエリのWHERE句は、* Select.where()*を使用して適用できます。 たとえば、ID> 2の行を表示する場合

s = students.select().where(students.c.id>2)
result = conn.execute(s)

for row in result:
   print (row)

ここで、 c属性はcolumn のエイリアスです。 次の出力がシェルに表示されます-

(3, 'Komal', 'Bhandari')
(4, 'Abdul', 'Sattar')
(5, 'Priya', 'Rajhans')

ここで、sqlalchemy.sqlモジュールのselect()関数でもselectオブジェクトを取得できることに注意する必要があります。 select()関数には、引数としてテーブルオブジェクトが必要です。

from sqlalchemy.sql import select
s = select([users])
result = conn.execute(s)