2016-09-26 5 views
0

私はPythonでsqlalchemyのデータベースのモデルを表す次のコードを持っています。 Y)は、「テーブル名どのようにコードのクラスをキャッチするPython動的に

from sqlalchemy import Column, Integer, String, Text, text 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.util.compat import ArgSpec 
from common.utilities import Utilities 

Base = declarative_base() 
metadata = Base.metadata 

class CcSipUser(Base,Utilities): 
    __tablename__ = 'cc_sip_users' 

    id = Column(Integer, primary_key=True) 
    username = Column(String(80, u'utf8_spanish_ci'), nullable=False, server_default=text("''")) 
    type = Column(String(6, u'utf8_bin'), nullable=False) 
    amaflags = Column(String(13, u'utf8_bin')) 
    call_limit = Column(Integer) 
    callgroup = Column(String(10, u'utf8_bin')) 
    callerid = Column(String(80, u'utf8_spanish_ci')) 
    cancallforward = Column(String(3, u'utf8_bin'), 
class Post(Base): 

    __tablename__ = 'post' 

    id = Column(Integer, primary_key=True) 
    title = Column(String(128, u'utf8_bin')) 
    body = Column(Text(collation=u'utf8_bin')) 


class Test(Base): 
    __tablename__ = 'test' 

    id = Column(Integer, primary_key=True) 
    exten = Column(Integer) 
    passw = Column(String(10, u'utf8_spanish_ci')) 
    dis_name = Column(String(10, u'utf8_spanish_ci')) 
+0

こんにちは、あなたはこれまでにしようとしているものを:最後の例は、まっすぐこちらのドキュメントからです

from sqlalchemy import * metadata = Metadata() for x in metadata.sorted_tables: print(x.name) 

? – Frodon

+0

これ:models.modelsインポート*モデルから インポート* TABLE1 = CcSipUser() 表2 =ポスト() 表3 =試験() 印刷TABLE1 .__ tablename__ 印刷表2 .__ tablename__ 印刷表3 .__ tablename__からしかし、私はクラスの名前を知っているし、すべてのコードを知る必要はありません。 –

答えて

0

実際のユースケースを知らない、あなたは(DIRの結果をループのような恐ろしい何かをすることができ、その名前とatrrで各クラスをキャッチします。

import models 

for x in dir(models): 
    try: 
    print(getattr(models, x).__tablename__) 
    except: 
    continue 

私はそれが他の何ものに関係なく動作するはずだと思います。

メタデータも使用する必要がありますが、テーブルはすでに作成されている必要があります。 http://docs.sqlalchemy.org/en/latest/core/metadata.html

+0

良いですが、そのテーブルに属するクラスを取ることはありません。 –

+0

@NicolBolivarあなたが何を言ったか分かりません。 – ApolloFortyNine

関連する問題