2014-01-23 87 views
4

我想將一個類傳遞給一個函數,並且不想再次傳遞該名稱。獲取表名按Table類在Sqlalchemy中

class TableClass(Base): 
    __table__ = Table('t1', metadata, autoload=True) 
def get_name(TableClass): 
    print TableClass.GetTableName() # print 't1' 
get_name(TableClass) 

因此,我用谷歌搜索它,並沒有答案。

回答

0

在SQLAlchemy中,您可以使用tableclass屬性獲取表信息。

在您的例子

print TableClass.__tablename__ # Prints 't1'

根據@Aylwyn湖的查找

print TableClass.__table__.name 
+0

'type object'TableClass'has no attribute'__tablename __'' –

+0

是啊你說得對。但是,當你使用基類創建Table類時,它將起作用。正如[這裏]提到的(http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html#declare-a-mapping) –

+1

這假定用戶在設置他們時使用'__tablename__'屬性進行映射代碼,雖然有時是這種情況,但並不是代碼是如何設置的。 –

0

獨立於你是否使用聲明分機或沒有,你可以使用Runtime Inspection API

def get_name(TableClass): 
    from sqlalchemy import inspect 
    mapper = inspect(TableClass) 
    print mapper.tables[0].name 

請注意,一個類可以有映射到它的多個表,例如使用時Inheritance