sqlite 对于列表中的每一项,我希望在数据库中查找其名称和相应的值

1zmg4dgp  于 2022-12-19  发布在  SQLite
关注(0)|答案(1)|浏览(141)

我想打印从数据库中获取的每个城市的居民人数列表。
我尝试为每个城市City1_Dinamic_List分配Inhabitants1city_static。由于我解释了下面的原因(可选阅读),我强制需要两个数据库表,所以我有一个列表创建与附加这是所谓的City1_Dinamic_List,将比较第二个表称为city_static
问题是要为每个City1_Dinamic_List分配Inhabitants1(考虑到它不是同一个数据库表的一部分),首先必须在city_static数据库的第二个表中找到City1_Dinamic_List的每个城市名称,否则Inhabitants1不知道该将其分配给谁,所以,我猜,您需要首先在City1_Dinamic_Listcity_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中只有简单的城市名称,没有任何数据库对应关系,希望有人能帮助我。

jljoyd4f

jljoyd4f1#

您要查找的是使用WHERE IN,例如SELECT city1, city2, inhabitants1, inhabitants2 FROM Place2 WHERE city1 IN ("Paris", "Tokyo", "Shangai")
地点1

city1
Paris
Tokyo
Shanghai

地点2
x一个一个一个一个x一个一个二个x
尽管你这样做有点过分。你甚至可以简单地
一个三个三个一个
我通常更喜欢使用dict_factory游标,这样您就可以使用row["city1"]来访问获取的值
也有可能使用CTE或内部连接来完成您想要的单个查询,而不需要列表,但是上述方法应该可以正常工作,而不必在python中执行任何检查,只需直接从SQL中获取即可

    • 应要求更新**

既然你问你将如何使用第一种方法打印,虽然我不建议这种方式。

c = conn.cursor()
c.execute("select city1 from place1")
result = [c[0] for c in c.fetchall()]
c.execute("select city1, city2, inhabitants from place2 where city1 in (%s)" % ",".join("?"*len(result)), result)
result = c.fetchall()
c.close()
for row in result:
    print(f"{row[0]} {row[1]} {row[2]} inhabitants")
conn.close

相关问题