python - 使用 SQLite 查询检索多个项目
问题描述
我正在尝试制作一个简单的地图制作功能。我有一个包含地理坐标('纬度'和'经度')、地名('feature_names)和 ISO-3166 国家代码('countrycodes')的数据库。现在我可以通过查询纬度/经度并让 Folium 制作我的地图来实现这一点,但问题在于,世界上有多个渥太华、温哥华、伦敦等。因此引入了国家代码来尝试缩小范围。
我的问题是我似乎无法让 SQL 查询返回任何内容。代码执行时不会向我抛出错误,但不会返回任何内容。TL;DR:如何对我的数据库进行多次查询?
cur.execute("SELECT feature_name FROM WorldCities")
locnames = str(cur.fetchall())
cur.execute("SELECT country_code FROM WorldCities")
countrycodes = str(cur.fetchall())
def mapmaker():
location = input(prompt = "Where would you like to go? ")
country = input(prompt = "Great! Do you know which country this is in? ")
if not location:
input(prompt = "Sorry, I didn't quite get that")
if location in locnames and country in countrycodes:
#latquery = "SELECT latitude FROM WorldCities WHERE feature_name = ? AND country_code = ?"
#lat = cur.execute(latquery, (location, ))
latquery = cur.execute("SELECT latitude FROM WorldCities WHERE feature_name = ? AND country_code = ?", ((location,) (countrycodes,)))
#lat = cur.execute(latquery, (location, + countrycodes))
latloc = (latquery.fetchall())
#longquery = "SELECT longitude FROM WorldCities WHERE feature_name = ?"
#long = cur.execute(longquery, (location, ))
#longloc = (long.fetchone())
print(latloc) #longloc[0], country[0])
#map = folium.Map(location=(latloc[0], longloc[0]), zoom_start=15)
#return map
else:
print ("Sorry, I didn't understand your query")
谢谢
解决方案
数据库可以比简单的平面行列表更智能。特别是,它可以包含索引以加速查询。如果不知道数据库是否以及如何被索引,就不可能优化查询。
如果您的数据库包含索引,则不应将其内容加载到平面列表中,而应使用直接查询。
话虽如此,您可以从查询中检索多个列,因此恕我直言,从您的表中提取地理坐标的正确方法应该是:
latlonquery = cur.execute("""SELECT latitude, longitude FROM WorldCities
WHERE feature_name = ? AND country_code = ?""", (location, countrycodes))
lat_lon = latlonquery.fetchone()
if lat_lon is not None:
lat, lon = lat_lon
print(lat, lon, location, country)
...
推荐阅读
- arrays - 带查找的动态数组的逐行文本连接
- docker - 在 aws ec2 中的 docker 容器上启用 https
- service - 如何将延迟指定为 SLA 中的指标?
- node.js - 将版本放入为 pkg 生成的可执行文件中
- go - go get 在尝试导入时添加文件夹?
- javascript - 在 JavaScript ES8 async/await 中,如何不等待那些我不关心的?
- mongodb - 使用 Arduino WiFi 的 MongoDB Webhook GET 请求
- node.js - 如何在未安装 Git 的情况下克隆 GitHub 存储库?
- git - 在已经存在的 gitlab 存储库中推送另一个项目
- docker - 识别 docker 主机名是否被传递或生成