13

我正在尝试做一些相对简单的事情,吐出列名和相应的列值,并可能过滤掉一些列,以便不显示它们。

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

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 ( v.5 ) 上的 API,但很困惑。我在“结果”中的“结果”是一个 RowProxy,但我认为它不会为 .items() 调用返回正确的对象。

假设我的表结构是这样的:

user_id    user_name    user_password    user_country
0          john         a9fu93f39uf      usa

我想过滤并指定要显示的列名(我不想明显显示 user_password) - 我该如何做到这一点?

4

2 回答 2

16

SQLAlchemy RowProxy对象具有类似字典的方法——.items()获取所有名称/值对,.keys()仅获取名称(例如,将它们显示为标题行,然后.values()用于相应的值或使用每个键来索引RowProxy对象,等等,等等——所以它是一个“智能对象”而不是一个普通的 dict,不应该给你带来不便。

于 2009-07-28T15:05:24.847 回答
15

您可以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 表达式语言教程。它包含有关使用 SqlAlchemy 进行基本查询的最重要信息。

于 2009-07-28T07:38:52.827 回答