如何在sqlalchemy查询中打印所有列?

时间:2018-02-13 15:32:07

标签: sqlalchemy

到目前为止我的代码:

from db_declarative import Base, OwnershipDocument
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('postgresql://iswdp:password@localhost/my_db')

Base.metadata.bind = engine

DBSession = sessionmaker()
DBSession.bind = engine
session = DBSession()

q_all = session.query(tablename).first()

从q_all我可以使用q_all.columnName打印单个值。如何打印所有这些?简单的方式似乎应该是这样的:

for i in q_all:
    print(i)

但只是说对象不可迭代。

1 个答案:

答案 0 :(得分:2)

有多种方式,有点不同。 您可以从映射对象的__table__属性中获取此信息,例如:

In [2]: obj.__table__.columns.keys()
Out[2]: 
['id',
 'email',
 'username',
 'password',
 'active']

In [3]: obj.__table__.columns.values()
Out[3]: 
[Column('id', Integer(), table=<users>, primary_key=True, nullable=False),
 Column('email', String(length=255), table=<users>, nullable=False),
 Column('username', String(length=64), table=<users>, nullable=False),
 Column('password', String(length=128), table=<users>),
 Column('active', Boolean(), table=<users>, nullable=False, server_default=DefaultClause('0', for_update=False))]

您还可以查看__dict__属性以查看当前加载的属性。请注意,这也将显示非列的属性。

In [4]: obj.__dict__
Out[4]: 
{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState at 0x7fb04df6b470>,
 'active': True,
 'email': 'test@example.com',
 'id': 3,
 'username': 'test'}