単一行の挿入
SQLAlchemy で挿入を行う方法はいくつかありますが、ここでは select ステートメントと同じパターンに従う方法に絞って扱います。
この方法では、対象のテーブルを引数に取る insert ステートメントを使い、挿入したいデータは .values() メソッドにキーワード引数として渡します。たとえば、my_table に my_col_1 と my_col_2 というカラムがある場合、insert(my_table).values(my_col_1=5, my_col_2="Example") は、my_col_1 が 5、my_col_2 が "Example" の行を my_table に作成します。
構文の違いに注意してください。既存のステートメントに where を追加する場合は、カラム名だけでなく「テーブル名」も含めます。たとえば new_stmt = old_stmt.where(my_tbl.columns.my_col == 15) のように書きます。これは、既存のステートメントが複数のテーブルを含む可能性があるためです。
一方で、insert は単一のテーブルに対してのみ行われるため、挿入時に values() を使う場合はテーブル名を含める必要はありません。例: stmt = insert(my_table).values(my_col = 10)。
ここでのテーブル名は data です。テーブル構造を確認するには、コンソールで repr(data) を実行してください。
この演習はコースの一部です
Pythonで学ぶデータベース入門
演習の手順
sqlalchemyモジュールからinsertとselectをインポートします。dataテーブルに対して、nameを'Anna'、countを1、amountを1000.00、validをTrueに設定する挿入ステートメントinsert_stmtを作成します。connectionを使ってinsert_stmtを実行し、結果をresultsに保存します。- 何件挿入されたか確認するために、
resultsの.rowcount属性を出力します。 nameが'Anna'のレコードをdataから取得するための select ステートメントを作成します。- 解答を実行して、select ステートメントの実行結果を表示します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import insert and select from sqlalchemy
from sqlalchemy import ____, ____
# Build an insert statement to insert a record into the data table: insert_stmt
insert_stmt = insert(____).values(name=____, ____, ____, ____)
# Execute the insert statement via the connection: results
results = connection.execute(____)
# Print result rowcount
print(____)
# Build a select statement to validate the insert: select_stmt
select_stmt = select([data]).where(____ == ____)
# Print the result of executing the query.
print(connection.execute(select_stmt).first())