我想打印从数据库中获取的每个城市的居民人数列表。
我尝试为每个城市City1_Dinamic_List
分配Inhabitants1
从city_static
。由于我解释了下面的原因注(可选阅读),我强制需要两个数据库表,所以我有一个列表创建与附加这是所谓的City1_Dinamic_List
,将比较第二个表称为city_static
。
问题是要为每个City1_Dinamic_List
分配Inhabitants1
(考虑到它不是同一个数据库表的一部分),首先必须在city_static
数据库的第二个表中找到City1_Dinamic_List
的每个城市名称,否则Inhabitants1
不知道该将其分配给谁,所以,我猜,您需要首先在City1_Dinamic_List
和city_static
之间搜索相同名称的城市,然后分配Inhabitants1
。
举个例子:如果在City1_Dinamic_List
中有巴黎,Tokyo,Shanghai,我希望在city_static
中找到Paris,Tokyo,Shanghai这行,并取对应的Inhabitants1
,那么输出结果应该如下所示:
Paris, 2 229 095 Inhabitants
Tokyo, 13 951 636 Inhabitants
Shanghai, 30 812 711 Inhabitants
我没有得到错误,但没有打印任何东西。我相信问题出在city_static中的循环和参数的条件中。
import sqlite3
conn = sqlite3.connect('abc')
City1_Dinamic_List = []
def Button1_func():
cursor1 = conn.cursor()
city_dinamic = cursor1.execute('SELECT city1, city2, other FROM Place1')
#add City1 to dinamic list
for row in city_dinamic.fetchall():
City1 = row[0]
City1_Dinamic_List.append(City1)
#City comparison and Inhabitants value extraction
cursor2 = conn.cursor()
city_static = cursor2.execute('SELECT city1, city2, inhabitants1, inhabitants2 FROM Place2 WHERE city1 = ?', [City1_Dinamic_List])
rows_city_static = city_static.fetchone()[2]
if City1_Dinamic_List in city_static[0]:
for row in City1_Dinamic_List:
Inhabitants1 = rows_city_static
print(row, Inhabitants1)
关于列表City1_Dinamic_List,我不认为它需要在这里显示数据库,因为你需要的只是用append创建的城市列表。而第二个数据库表city_static
,从中提取信息,是这样的:
CREATE TABLE "Place2" (
"id" INTEGER,
"city1" INTEGER,
"city2" INTEGER,
"inhabitants1" INTEGER,
"inhabitants2" INTEGER,
PRIMARY KEY("id" AUTOINCREMENT)
);
**可选说明:**如果我只使用一个数据库表,这会更容易,但我不能。我的表是一个特例。为什么要使用两个不同的表?问题是城市名称总是在变化,而且是动态的,所以我不能使用同一个数据库中唯一的表,所以我使用了数据库中的两个表:city_dynamic,这里只有我需要的几个城市,它们经常更改名称,然后city_static,通常包含所有城市的数据。如您所见,我创建了一个名为City1_Dinamic_List的列表,其中包含我需要的城市名称,但我不知道这些城市对应的居民,因为City1_Dinamic_List中只有简单的城市名称,没有任何数据库对应关系,希望有人能帮助我。
1条答案
按热度按时间jljoyd4f1#
您要查找的是使用WHERE IN,例如
SELECT city1, city2, inhabitants1, inhabitants2 FROM Place2 WHERE city1 IN ("Paris", "Tokyo", "Shangai")
地点1
地点2
x一个一个一个一个x一个一个二个x
尽管你这样做有点过分。你甚至可以简单地
一个三个三个一个
我通常更喜欢使用dict_factory游标,这样您就可以使用
row["city1"]
来访问获取的值也有可能使用CTE或内部连接来完成您想要的单个查询,而不需要列表,但是上述方法应该可以正常工作,而不必在python中执行任何检查,只需直接从SQL中获取即可
既然你问你将如何使用第一种方法打印,虽然我不建议这种方式。