在Sqlalchemy中按表类获取表名

时间:2014-01-23 07:00:27

标签: python sqlalchemy

我想将一个类传递给一个函数,并且不想再次传递该名称。

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

所以,我用谷歌搜索它,没有答案。

6 个答案:

答案 0 :(得分:11)

根据:

How to discover table properties from SQLAlchemy mapped object

我可以用这个:

print TableClass.__table__.name

答案 1 :(得分:3)

无论您是否使用声明性扩展,您都可以使用Runtime Inspection API

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

请注意,一个类可以有多个表映射到它,例如使用Inheritance时。

答案 2 :(得分:1)

没有一个答案对我有用。

这样做:

对于类对象:

TableClass.sa_class_manager.mapper.mapped_table.name

对于实例对象:

tableObj.sa_instance_state.mapper.mapped_table.name

答案 3 :(得分:0)

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

在你的例子中

<击> print TableClass.__tablename__ # Prints 't1'

根据@Aylwyn Lake的发现

print TableClass.__table__.name

答案 4 :(得分:0)

print TableClass.__tablename__

适合我

答案 5 :(得分:0)

我自己碰到了这个问题,传递了对象,也不想传递表名的字符串。

结果是,它只是Table对象的一个​​属性,例如:

table = new Table("somename",meta)

...
print("My table is called: " + table.name)