2009-07-28 39 views
9

我想要做一些相对简单的事情,吐出列名和相应的列值,并且可能会过滤掉某些列,以免它们显示出来。SQLAlchemy:对结果进行操作

这是我尝试(当然的初始连接之后):

metadata = MetaData(engine) 

users_table = Table('fusion_users', metadata, autoload=True) 

s = users_table.select(users_table.c.user_name == username) 
results = s.execute() 

if results.rowcount != 1: 
    return 'Sorry, user not found.' 
else: 
    for result in results: 
    for x, y in result.items() 
     print x, y 

我看着SQLAlchemy的(第5节)的API,但很是困惑。 '结果'中的'结果'是一个RowProxy,但我不认为它会为.items()调用返回正确的对象。

比方说,我的表结构是这样:

user_id user_name user_password user_country 
0   john   a9fu93f39uf  usa 

我想过滤和指定列名,以显示(我不想明明显示USER_PASSWORD) - 我怎样才能做到这一点?

回答

10

您可以立即使用results作为迭代器。

results = s.execute() 

for row in results: 
    print row 

选择特定的列被做了以下的方法:

from sqlalchemy.sql import select 

s = select([users_table.c.user_name, users_table.c.user_country], users_table.c.user_name == username) 

for user_name, user_country in s.execute(): 
    print user_name, user_country 

要打印的列名额外的价值,你已经在你的问题应该是最好做的方式,因为RowProxy真的不算什么不仅仅是一个有序的字典。

IMO SqlAlchemy的API文档对于学习如何使用它并不是很有帮助。我建议你阅读SQL Expression Language Tutorial。它包含有关使用SqlAlchemy进行基本查询的最重要信息。

+0

第一个片段是我最初想到的,并返回了一切。 对于第二个片段,我得到“ValueError:太多的值来解压缩” - hrm? – 2009-07-28 07:49:04

14

甲SQLAlchemy的RowProxy对象具有类似字典的方法 - .items()获得所有的名称/值对,.keys()得到公正的名称(例如,以显示它们作为一个标题行,然后使用.values()为相应的值,或使用各键指向RowProxy对象,等等 - 所以它是一个“聪明的对象”,而不是一个普通的字典,不应该给你带来不便。