我想将一个类传递给一个函数,并且不想再次传递该名称。
class TableClass(Base):
__table__ = Table('t1', metadata, autoload=True)
def get_name(TableClass):
print TableClass.GetTableName() # print 't1'
get_name(TableClass)
所以,我用谷歌搜索它,没有答案。
答案 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)