ヤマムギ

growing hard days.

*

SQLAlchemyのModelクラスをMySQLから自動生成する

   


SQLAlchemyのMySQLモデルを書くのが面倒で、きっと何かツールがあるのでしょうが、探せなかったので作りました。

  • JOINとかには対応してないので用途によっては生成後書き足す事も必要です。
  • この例ではAmazon RDSのMySQLを使用しています。
  • config.pyはそれぞれの環境にあわせて作成してください。
  • 全ての型を網羅していません。自分が取り急ぎ必要な型だけサポートしています。

GitHubのコードはこちらです。

テーブル情報の取得

まず、pymysqlでデータベースに接続して show tables で全テーブル情報の配列を取得します。
書き出し先のテキストファイルも用意します。

show tablesの結果

テーブル名がTables_in_[db_name]というカラムで出力されます

Tables_in_db_name
table_name_1
table_name_2

カラム情報の取得

テーブル情報配列をループしてtable[‘Tables_in_’ + db_name]でテーブル名を取得します。
そして、show columns from table_name でテーブルの情報を取得します。

show columns from ‘ + table_nameの結果

カラム名、型、Null許可か、プライマリキーか、デフォルト値といった情報が出力されます。
なので、この情報をもとにモデルクラスを書き出します。

Field Type Null Key Default Extra
id int(10) NO PRI
name varchar(20) YES NULL

型と長さとunsigned

Type列の出力値からSQLAlchemyの文法にもとづいて生成します。

モデルクラスの書き出し

テーブル名を書き出した後、カラムを1行づつインデントを付けて書き出します。

出来た!

@yamamanx

開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー1年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。

このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。

また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。

 - Python ,

ad

ad

  関連記事

「大阪Pythonユーザの集まり」に行ってきました

「大阪Pythonユーザの集まり」 に行ってきました。 あんまりメモ取れてません …

個人のGoogleカレンダーの予定をPythonで取得する

Google Calendar Twilio ReminderのGoogleカレ …

PythonでHTMLエスケープされた全角ハイフンをアンエスケープする

PythonでHTMLエスケープとアンエスケープについて調べていると、 xml. …

Pepperで撮影した写真をAmazon Rekognitionで分析してその結果をPepperがしゃべる ~(2)Pepper編~

Pepperで撮影した写真をAmazon Rekognitionで分析してその結 …

Linux Mint 17 MATE 64bit にTensorFlowをインストールする

勉強会でTensorFlowを使用しますので、Linux Mint 17 MAT …

pyenv update で「pyenv: no such command `update’ 」

環境 macOS Sierra 10.12.4 pyenvのアップデート pye …

SQLAlchemyでjoinする

PythonのSQLAlchemyでMySQLのテーブルをjoinするときの覚書 …

Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)

やりたいこと Feedlyで共有したいフィードに特定のタグを付けます。 特定のタ …

pythonのsqlalchemyで嵌った話

エラーメッセージ InvalidRequestError: SQL expres …

SendGrid(Python)で添付ファイル付きのメールを送信する

SendGridを使って添付ファイル付きのメールを送信するサンプルをPython …