ヤマムギ

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認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

【PR】 「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。

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

【PR】 「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

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

 - Python ,

ad

ad

  関連記事

PyCharmでテキストを折り返す

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

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

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

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

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

Pepper 開発 ワークショップ初級~中級~番外編に1日で一気に参加した

Pepperの開発方法が知りたかったので、Pepperアトリエ秋葉原 with …

pythonのsqlalchemyで嵌った話

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

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

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

Redmine REST APIを操作するpython_redmineを試してみた

Redmine のGUIの登録が面倒なのでコマンドで登録、更新、時間の記録が出来 …

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

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

Rocket.ChatのAPIでユーザーを一括登録する

Rocket.Chatの管理画面にインポートのメニューはあって、どうやらuser …

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

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