我有一个数据库表 flight
```
pkid from_city to_city
1 Melbourne BuenosAires
2 Budapest Tokyo
3 Praslin Anchorage
然后我有一个列表/元组的一些随机城市 `['Paris','Tokyo','Madrid','Anchorage','im_not_on_earth']` 现在使用sqlalchemy元数据,我需要一个返回 `pkid` 为了匹配 `to_city` 在给定的列表中,如果存在,或者返回一些默认值,比如 `0` 如果不存在
所以基本上我的输出应该给每个城市一些整数,我可以把输出中的每个整数Map到给定输入中的某个城市
以下任何示例输出都适用于我-
{'Paris':0, 'Tokyo': 2, 'Madrid': 0, 'Anchorage': 3, 'im_not_on_earth': 0}
或者干脆。。。。。。 `[0,2,0,3,0]` 对如何做这件事有什么想法或建议吗?我想我可以通过使用coalesce来实现这一点。但只有当where子句中的值存在于db table中时,这种方法才有效。不确定我对凝聚的理解是否正确。
edit:**我不想对给定输入中的每个元素使用for循环和查询进行迭代**
2条答案
按热度按时间wqnecbli1#
你可以用
apply()
并定义自己的函数,例如:产量:
rn0zuynd2#
您要做的是在您提供的城市列表和航班表中的tocity列之间进行外部连接。如果数据库不知道您所提供的城市列表,那么您将不得不使用循环来执行此加入应用程序代码。在您的示例代码中,每个tou city只出现在一个数据库行中,因此只Map到一个pkid。我假设多个不同的城市有可能有飞往同一城市的航班,因此需要将每个城市Map到pkid列表,而不是单个值。因此,没有航班前往的目的地城市将由空列表表示,而不是0。
您可以用一个数据库查询来检索匹配城市的列表,但是您需要一个循环来与您提供的tou城市列表进行外部连接。下面的代码应该可以实现您想要的。由于您没有提供sqlalchemy代码,我假设您正在使用orm和声明性系统来定义表。
考虑到您必须在应用程序代码中进行外部连接,所以考虑数据库设计是值得的。数据库将是一个更有效的地方来实现这一点。如果您有一个包含所有城市名称的单独表,该表与航班表具有外键关系,那么您可以通过在查询中的城市表和航班表之间执行外部联接,在单个查询中实现所需的功能。