这一行:
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)。有关如何做到这一点的任何建议吗?
答案 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]