如何在SQLAlchemy ORM中打印所有列

mrm*_*oey 18 python sqlalchemy

使用SQLAlchemy,我试图以类似于以下的方式打印出每个模型的所有属性:

SELECT * from table;
Run Code Online (Sandbox Code Playgroud)

但是,我想在每个模型实例信息中做一些事情.到目前为止,我能够提出的最好的是:

for m in session.query(model).all():
    print [getattr(m, x.__str__().split('.')[1]) for x in model.__table__.columns]
    # additional code 
Run Code Online (Sandbox Code Playgroud)

这将给我我正在寻找的东西,但它是一个相当迂回的方式得到它.我有点希望得到一个属性:

m.attributes 
# or 
m.columns.values
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些东西,并且有更好的方法可以做到这一点.我这样做是因为我将打印所有内容到.CSV文件,我不想指定我感兴趣的列/属性,我想要一切(很多列都有很多要打印的模型).

小智 22

这是一篇旧帖子,但是我遇到了实际数据库列名与实例上的映射属性名不匹配的问题.我们结束了这个:

from sqlalchemy import inspect
inst = inspect(model)
attr_names = [c_attr.key for c_attr in inst.mapper.column_attrs]
Run Code Online (Sandbox Code Playgroud)

希望能帮助有同样问题的人!


Kur*_*rtB 12

以罗德尼的回答为基础:

model = MYMODEL
columns = [m.key for m in model.__table__.columns]
Run Code Online (Sandbox Code Playgroud)


Kos*_*nko 9

可能是最短的解决方案(参见最近的文档):

from sqlalchemy.inspection import inspect
table = inspect(model)
for column in table.c
    print column.name
Run Code Online (Sandbox Code Playgroud)

  • 不错的解决方案,这解决了我的问题 (2认同)

Ale*_*lev 5

看一下SQLAchemy的元数据反射功能.

  • {{i.name:getattr(m,i.name)for my in m .__ table __。columns}}这对我来说很好。 (4认同)
  • 使用flask的sqlalchemy ORM,我能够通过以下方式获取列名:data_table.__table__.columns (2认同)

Fah*_*suf 5

我相信这是最简单的方法:

print [cname for cname in m.__dict__.keys()]
Run Code Online (Sandbox Code Playgroud)

编辑:使用sqlalchemy.inspection.inspect()上面的答案似乎是一个更好的解决方案.


Cur*_*lop 5

print repr(model.__table__)
Run Code Online (Sandbox Code Playgroud)

或者只是列:

print str(list(model.__table__.columns))
Run Code Online (Sandbox Code Playgroud)