2009-09-15 33 views
20

私は既存のmysqlデータベースに約50のテーブルを含んでいます。各テーブルの宣言型のスタイルSQLAlchemyのクラス(as shown here)は、各テーブルの宣言型スタイルでPythonのクラスを生成します、私はmysqlデータベースに対して実行できるツール/スクリプト/コマンドがある。むしろ手のコードよりもリバースエンジニアSQLAlchemy既存のMySQLデータベースの宣言クラス定義?

データベースに?

次のように(理想的にはすべての50のために生成されます)の例として、ただ一つのテーブルを取るために:

+---------+--------------------+ 
| dept_no | dept_name   | 
+---------+--------------------+ 
| d009 | Customer Service | 
| d005 | Development  | 
| d002 | Finance   | 
| d003 | Human Resources | 
| d001 | Marketing   | 
| d004 | Production   | 
| d006 | Quality Management | 
| d008 | Research   | 
| d007 | Sales    | 
+---------+--------------------+ 

のようなものを含むテキストファイルを生成できるツール/スクリプト/コマンドがあります

from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

class Department(Base): 
    __tablename__ = 'departments' 

    dept_no = Column(String(5), primary_key=True) 
    dept_name = Column(String(50)) 

    def __init__(self, dept_no, dept_name): 
     self.dept_no = dept_no 
     self.dept_name = dept_name 

    def __repr__(self): 
     return "<Department('%s','%s')>" % (self.dept_no, self.dept_name) 
+0

これは、SQLジェネレータを避けるべき理由の良い例です:)。 –

+11

なぜでしょうか? – zzzeek

答えて

28

使用sqlautocode

既存のデータベースからモデルを自動生成するための柔軟なツールです。

SqlSoupのやや異なるアプローチです。明示的に定義することなくテーブルを使用できます。一方、sqlalutocodeは実際のPythonコードを生成します。

+0

素晴らしいです、ありがとうございます –

+0

sqlautocode最新リリースは2010年で、最新のsqlalchemyでは動作しません。もっと現在の選択肢はありますか? – goncalopp

+7

@goncalopp:はい、[sqlacodegen](https://pypi.python.org/pypi/sqlacodegen) – Pakman

4

SqlSoupは、既存のSQLスキーマの内向きマッピングを実行できます。

+0

はい、それはPython 3をサポートしていません。私は今それを移植しようとしています。 –

6

宣言は、反映された表で使用できます。起動時間が巨大な問題ではない場合は、これを行うことができます:

engine = create_engine('mysql://...') 
meta = MetaData() 
meta.reflect(bind=engine) 
for table in meta.tables.values(): 
    print """ 
class %s(Base): 
    __table__ = Table(%r, Base.metadata, autoload=True) 

""" % (table.name, table.name) 

それ以外のオートコードはおそらく行く方法です。

5

今、(2015年に)あなたはおそらくhttps://pypi.python.org/pypi/sqlacodegenを代わりに使用したいと考えています。

+0

私のためのクラス、テーブルインスタンスだけを作成しません。 – lfk

関連する問題