我正在金字塔项目中工作,我在SQLAlchemy中使用声明性语法
"""models.py"""
class Projects(Base):
__tablename__ = 'projects'
__table_args__ = {'autoload': True}
我使用
获得结果""""views.py"""
session = DBSession()
row_data = session.query(Projects).filter_by(id=1).one()
如何从此结果中获取列名。
PS:我无法使用this方法,因为我使用的是声明性语法。
答案 0 :(得分:42)
你可以做一些类似于Foo Stack答案的事情而不诉诸私人领域:
conn.execute(query).keys()
答案 1 :(得分:26)
区别在于ORM和非ORM,而不是声明,这只是ORM的帮助。
Query有一个为此目的添加的方法column_descriptions()
::
http://www.sqlalchemy.org/docs/orm/query.html#sqlalchemy.orm.query.Query.column_descriptions
示例似乎有一个拼写错误,q.columns
说,但它应该是q.column_descriptions
(编辑:只修复它)。
答案 2 :(得分:23)
Project.__table__.columns.keys()
然后,这将返回列名[' id',' date',' value',...]:
Project.metadata.tables['table1'].columns.keys()
或者这个
<asp:ScriptManager>
答案 3 :(得分:7)
只是玩一下,这个语法会给你所有的列(所以要解决你的问题,设置查询只查看一个表/对象):
conn.execute(query)._metadata.keys
答案 4 :(得分:2)
此链接显示如何获取有关表,列等的所有元数据。
以上许多答案均基于此页面上的信息。 假设我们已经声明了一个表。
Rails.application.config.action_controller.raise_on_unfiltered_parameters = true
以下是获取有关表元数据的一些示例。
employees = Table('employees', metadata,
Column('employee_id', Integer, primary_key=True),
Column('employee_name', String(60), nullable=False),
Column('employee_dept', Integer, ForeignKey("departments.department_id"))
)
答案 5 :(得分:2)
只是
>>> q[0].keys()
之后
row_data = session.query(Projects).filter_by(id=1).one()
示例:
>>> q = session.query(users_user.phone,users_user.first_name).filter(users_user.phone=='79267548577').limit(1).all()
>>> columns_names = q[0].keys
结果:
>>> q[0].keys()
['phone', 'first_name']
>>>
答案 6 :(得分:-1)
想扩展@zzzeek 的回答。确实 Query 具有 column_descriptions
属性,但并非适用于所有方法。
考虑以下两个查询:
1. query = session.query(Projects).filter_by(<filter_condition>)
2. query = session.query(Projects).all() <-- This query does not have column_descriptions.
因此,如果您遇到需要使用 column_descriptions
属性但使用 ...query(...).all()
的情况,那么您可以将其更改为 ...query(...).filter_by()
即 filter_by()
而不需要任何过滤条件。