ヤマムギ

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行づつインデントを付けて書き出します。

出来た!


最後までお読みいただきましてありがとうございました!

【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。

 - Python ,

ad

ad

  関連記事

SQLAlchemy Session.executeでinsertしてAUTO INCREMENTでセットされたプライマリキーを取得したい

PythohのORMライブラリSQLAlchemyでMySQLにインサートしたレ …

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

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

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

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

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

Google Calendar Twilio ReminderのGoogleカレ …

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

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

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

今日行く勉強会でIPython Notebookの環境が必要なため、手持ちのLi …

IPython Notebookで梅田のラーメン屋さんの統計情報を抽出するというハンズオンに行ってきました

IPython Notebookで梅田のラーメン屋さんの情報をWebスクレイピン …

docomo Developer supportの 雑談対話APIから自然対話APIへ移行しました

LINEやSlackのbotで重宝していた、雑談対話APIが終了する、とのことで …

「streamlit勉強会」に参加しました

streamlitってなんだろう? と思いながら参加しまししました。 fin-p …

SQLAlchemyでjoinする

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