从数据库SQLAlchemy返回多个字段

时间:2012-11-05 01:45:08

标签: python sqlalchemy

这一行:

used_emails = [row.email for row
           in db.execute(select([halo4.c.email], halo4.c.email!=''))]

返回:

['first.last@domain.com', 'first.last@domain.com', 'first.last@domain.com', 'first.last@domain.com', 'first.last@domain.com']

我用它来找到一个匹配:

if recipient in used_emails:

如果找到匹配项,我需要从同一行的数据库中提取另一个字段(halo4.c.code)。有关如何做到这一点的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我会通过说我的SQLAlchemy体验是有限的来警告这一点(如果这偏离基础,那么道歉),但是当你得到你的结果时,创建一个字典(而不是列表)是否可行,键入email,其值表示行中的所有数据(SELECT *)?这样,如果您找到匹配的电子邮件,则可以引用该密钥的值并提取所需的数据(即halo4.c.code)。这应该可以节省您的另一个数据库命中,因为您的字典中将存在该值。

在Python 2.7中,类似于:

used_emails = {row.email: row.code for row in select([halo4.c.email, halo4.c.code], halo4.c.email != '')}

或者在Python 2.6中:

used_emails = dict(
    (row.email, row.code) for row in db.execute(
        select([halo4.c.email, halo4.c.code]halo4.c.email!='')))

然后你可以使用类似的东西:

if recipient in used_emails:
    # This may not be the proper syntax - happy to troubleshoot if not
    print used_emails[recipient]