ORM機能は使いません)python物資難の時代、化学者はカップ酒をビーカー代わりに使った・・・らしい(本文とは関係ありません)こんにちは、エムスリー・エンジニアリングG・基盤開発チーム小本です。SQLAlchemyはPythonのSQLライブラリのデファクトスタンダードで、エムスリーでも使っていますが、意外と導入の障壁が高い。そこで、とりあえずSQLAlchemyを使い始めるのに必要な情報を調べました。具体的には生の(文字列の)SELECT文を組み立て、クエリする方法を説明します。「重い」使い方の記事ばかりがヒットします。SQLAlchemy入門というスライドが秀逸です)。実際にはエムスリーでは(多分他の現場でも)、SELECT文を組み立てクエリするだけの「軽い」使い方がむしろメインです。そこで、新入社員や他部署から異動してきた新メンバー用に「軽い」使い方の入門とした書いたのがこの記事です。使い方:実行編インストールsqlalchemy自体のインストールはpipenvを使う普通の方法でできます。sqlalchemy接続するDBに合わせてDBAPIライブラリも別途必要になります。pysqliteなお、SQLAlchemyは他のDBにも対応していますし、一種類のDBに対し複数のDBAPIをサポートしています。詳しくはドキュメントを参照してください。関数にURLを指定します。create_engineという名前の通り、SQLAlchemyではDBへの接続を表すオブジェクトを「エンジン」と呼びます。名で指定するURLの代わりに、別途DBAPIのオブジェクトを渡すこともできます。creator=connect)なお、エンジンは実際にはDBへの接続そのものではありません(別にConnectionというクラスがある)。SQL文を実行する単にSQLを実行するだけなら.executeを使うだけです。いうリストっぽいオブジェクトが返り、for文でクエリを行ごとに取得できます。使い方はリストっぽいですが、実際にはリストではなく、クエリ結果を全て格納しているわけではない(必要に応じてDBから取得する)ため、クエリ結果が巨大であってもメモリを大量消費することはありません。.close()で明示的に解放することもできます。パラメータを渡すSQLにプレースホルダを書くこともできます。DB独立な表現をしたいなら、後述するSQLをPythonオブジェクトによる表現を使います。使って、SQLの結果をDataFrameとして取得できます。いう関数もありますが、こちらはSQLではなくテーブル名も受け取れるなど、多少複雑な動作をしているようです。使った方が変にハマることがなさそうです。関数を使って組み立てます。値を保持しているので、.executeするときにはパラメータを指定する必要はありません。使うと、差し込む値を未定にしたまま、プレースホルダを使うことができます。パラメータで指定します。部分には式を指定することもできます。.labelで別名(SQLのAS)を指定できます。使ってJOINを生成することができます。テーブルに対しても、サブクエリに対しても使うことができます。型を変換しなければなりません。いうプロパティを使い、式の中でカラムを参照できます。使った方が、存在しないカラムを参照するミスをしたりしない分、安全でしょう。メソッドを使うとトランザクションを作れます(レポート作成などでは、あまり使う機会はないでしょうが)。単なる文字列ではなく、それぞれ異なる型を持っています。そのため、関数に誤った型のオブジェクトを渡すとエラーになります。使えるようになっていれば、幸いです。文やUNIONの書き方、更新系の処理などについては、公式ドキュメントを参照してください。SQLAlchemy入門というスライドが秀逸ですので、ぜひご覧ください。エンジニアを募集しています!エムスリーでは、顧客向けレポートの作成や、機械学習の分野でPythonを使っています。一緒に働く仲間を募集中です。お気軽にお問い合わせください。AI・機械学習チームの笹川です。...2019-09-27新しいアンケートシステムをつくった(Digdag・Embulk・BigQueryデータ同期編)「作れないものがない」アンケート作成システムを作成した、エ...2019-04-22TypeScriptの型でなんかすごくがんばるエンジニアリンググループの冨岡です。月別アーカイブ注目記事はてなブログをはじめよう!m3techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。