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)
可能是最短的解决方案(参见最近的文档):
from sqlalchemy.inspection import inspect
table = inspect(model)
for column in table.c
print column.name
Run Code Online (Sandbox Code Playgroud)
我相信这是最简单的方法:
print [cname for cname in m.__dict__.keys()]
Run Code Online (Sandbox Code Playgroud)
编辑:使用sqlalchemy.inspection.inspect()上面的答案似乎是一个更好的解决方案.
print repr(model.__table__)
Run Code Online (Sandbox Code Playgroud)
或者只是列:
print str(list(model.__table__.columns))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28019 次 |
| 最近记录: |