Suk*_*mar 32 python pylons sqlalchemy pyramid
我正在金字塔项目中工作,我在SQLAlchemy中使用声明性语法表
"""models.py"""
class Projects(Base):
__tablename__ = 'projects'
__table_args__ = {'autoload': True}
Run Code Online (Sandbox Code Playgroud)
我通过使用获得结果
""""views.py"""
session = DBSession()
row_data = session.query(Projects).filter_by(id=1).one()
Run Code Online (Sandbox Code Playgroud)
如何从此结果中获取列名称.
PS:我无法使用此方法,因为我使用的是声明性语法.
小智 47
您可以执行类似于Foo Stack的答案,而无需通过以下方式执行私有字段:
conn.execute(query).keys()
Run Code Online (Sandbox Code Playgroud)
zzz*_*eek 27
区别在于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(编辑:修复它).
Lyd*_*dia 27
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import (Column, Index, Date, DateTime, Numeric, BigInteger, String, ForeignKey, Boolean)
Base = declarative_base()
class Project(Base):
"""sqlalchemy ORM for my table."""
__tablename__ = "table1"
id = Column("id", BigIntegerID, primary_key=True, autoincrement=True)
date = Column("date", Date, nullable=False)
value = Column("value", Numeric(20, 8))
...
...
Run Code Online (Sandbox Code Playgroud)
然后这将返回列名['id','date','value',...]:
Project.__table__.columns.keys()
Run Code Online (Sandbox Code Playgroud)
或这个
Project.metadata.tables['table1'].columns.keys()
Run Code Online (Sandbox Code Playgroud)
ToJ*_*oJo 12
简短的回答是我最终得到了以下解决方案:
column_names = query.statement.columns.keys()
Run Code Online (Sandbox Code Playgroud)
为什么?
我有一个类似的用例,我需要知道查询返回的显式列(即查询不一定包含表类的所有列)。由于该表的大小也很大(数百万个条目),prolibertas 的答案在性能方面并不令人满意。下面是我的 94 列表的性能比较:
# First create a query with 100.000 entries
query = (
session.query(myTable)
.limit(100000)
)
# Then get the column names ..
column_names = session.execute(query).keys()
# ---> ~ 5.730 seconds
column_names = query.statement.columns.keys()
# ---> ~ 0.003 seconds
Run Code Online (Sandbox Code Playgroud)
只是玩,这个语法将为您提供所有列(所以要解决您的问题,设置查询只查看一个表/对象):
conn.execute(query)._metadata.keys
Run Code Online (Sandbox Code Playgroud)
此链接显示了如何获取您可能需要的有关表、列等的所有元数据。
上面的许多答案都基于此页面上的信息。假设我们已经声明了一个表。
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"))
)
Run Code Online (Sandbox Code Playgroud)
以下是获取有关表的元数据的一些示例。
# access the column "EMPLOYEE_ID":
employees.columns.employee_id
# or just
employees.c.employee_id
# via string
employees.c['employee_id']
# iterate through all columns
for c in employees.c:
print(c)
# get the table's primary key columns
for primary_key in employees.primary_key:
print(primary_key)
# get the table's foreign key objects:
for fkey in employees.foreign_keys:
print(fkey)
# access the table's MetaData:
employees.metadata
# access the table's bound Engine or Connection, if its MetaData is bound:
employees.bind
# access a column's name, type, nullable, primary key, foreign key
employees.c.employee_id.name
employees.c.employee_id.type
employees.c.employee_id.nullable
employees.c.employee_id.primary_key
employees.c.employee_dept.foreign_keys
# get the "key" of a column, which defaults to its name, but can
# be any user-defined string:
employees.c.employee_name.key
# access a column's table:
employees.c.employee_id.table is employees
# get the table related by a foreign key
list(employees.c.employee_dept.foreign_keys)[0].column.table
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55191 次 |
| 最近记录: |