ヤマムギ

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 クラウドプラクティショナー」という本を書きました。

 - Python ,

ad

ad

  関連記事

「神戸Pythonの会 #2 meetup」に行ってきました

「神戸Pythonの会 #2 meetup」に行ってきました。 目次 所感など本 …

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

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

CentOS 6にPython実行環境を構築

CentOS6(32bit)にPython2.7実行環境を構築した際のメモです。 …

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

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

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

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

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

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

CentOS 6でPythonからOracleに接続する

OracleのデータをPythonでさわりたくて、その実行環境がCentOS6の …

Python SQLAlchemy MySQLでテーブルを指定せずにFunctionを使う

難しく考えて悩んでいましたが、queryに書いてやればいいだけでした。 sess …

PyCharmでテキストを折り返す

超小ネタです。 コーディングしているときは1行でそんなに長いコードを書かないので …

SQLAlchemyでjoinする

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