当前位置:首页 > 问答 > 正文

数据库里那些列表数据咋提取,list里面的数据又该怎么拿出来用呢?

基于常见的编程概念和数据处理逻辑进行阐述)

第一部分:数据库里的列表数据咋提取

咱们得搞清楚,数据库里其实没有严格叫“列表”的东西,我们常说的“列表数据”,在数据库里通常指的是一张表里的多行数据,你有一张叫“用户信息”的表,里面可能有成百上千个用户的信息,每个用户占一行,你想把所有这些用户的名字都拿出来,那这个“所有用户的名字”就是一个“列表数据”。

那怎么把这些数据从数据库里“掏”出来呢?这个过程一般分三步走:

第一步:连接数据库 这就好比你想从家里的保险柜拿东西,总得先走到保险柜面前,用钥匙或者密码打开它吧,连接数据库也是一样,你需要告诉你的程序:数据库在哪儿(地址),叫什么名字(数据库名),用什么账号和密码登录,这些信息通常由管理数据库的人提供,在程序里,你会用一些专门的工具(叫做数据库驱动或连接库,比如Python里的pymysql、sqlite3)来建立这个连接,一旦连接成功,你的程序就和数据库“搭上线”了。

第二步:编写查询命令(SQL语句) 打开保险柜后,你不能胡乱抓一把,得明确告诉它你要什么,对数据库说话,要用一种叫SQL的特殊语言,最常用、最基础的命令就是SELECT

  • SELECT * FROM 用户信息表; 这句话的意思是:“从‘用户信息表’里,把所有列(*代表所有)的数据都给我拿过来。”
  • SELECT 姓名, 电话 FROM 用户信息表 WHERE 年龄 > 18; 这句话就更具体了:“从‘用户信息表’里,只把‘姓名’和‘电话’这两列的数据给我,但有个条件,只要那些‘年龄’大于18岁的用户。”

你看,通过写不同的SQL语句,你可以非常精确地指定你要提取哪些“列表数据”,甚至可以加上排序、分组等复杂要求。

第三步:执行查询并接收结果 你用程序向数据库发送了SQL命令后,数据库这个“听话的助手”就会立刻去表里查找,然后把找到的所有符合条件的数据行打包成一个“结果集”,这个结果集,就可以被你的程序接收过来,在程序里(比如用Python),这个结果集通常会被转换成一个我们更容易处理的形式,比如一个列表,而这个列表里的每一个元素,就对应着数据库里的一行数据,这一行数据本身也可能是一种可以按顺序访问的结构(比如元组或字典)。

简单总结一下:连上线 -> 说清楚要啥(SQL)-> 拿到结果集(变成程序里的列表)

第二部分:list里面的数据又该怎么拿出来用呢?

数据库里那些列表数据咋提取,list里面的数据又该怎么拿出来用呢?

假设我们已经成功地从数据库里把数据提取出来了,并且在程序里它已经变成了一个叫user_list的列表,这个列表可能长这样(以Python为例):

user_list = [
    (‘张三’, 25, ‘北京’),
    (‘李四’, 30, ‘上海’),
    (‘王五’, 28, ‘广州’)
]

这个列表里面包含了三个用户的信息,每个用户的信息被放在一个小括号(这叫元组)里,我们怎么把“张三”、“北京”这些具体的数据拿出来用呢?

核心方法就是“点名”和“排队数数”。

按位置拿(排队数数) 在编程的世界里,列表有个很重要的特点:顺序,而且顺序号是从0开始数的,不是从1开始。

  • 你想拿整个列表的第一个用户?那就写 user_list[0],这样你就会得到 (‘张三’, 25, ‘北京’) 这整个元组。
  • 你想拿第三个用户的年龄?先拿到第三个用户:user_list[2] (因为0-张三,1-李四,2-王五),这会得到 (‘王五’, 28, ‘广州’),在这个小元组里继续“数数”:第0个是名字‘王五’,第1个是年龄28,所以合起来就是 user_list[2][1],这样就拿到了数字28

这种方法很直接,但你必须清楚地知道每个数据在列表和元组里的准确位置。

数据库里那些列表数据咋提取,list里面的数据又该怎么拿出来用呢?

如果数据是“键值对”形式,按名字拿(点名) 我们从数据库拿回的数据会更友好,它可能不是上面那种光秃秃的元组,而是字典(Dictionary),字典就像我们查新华字典,通过“部首”(键)就能找到“具体字和解释”(值),如果上面的数据是字典形式,会是这样的:

user_list = [
    {‘姓名’: ‘张三’, ‘年龄’: 25, ‘城市’: ‘北京’},
    {‘姓名’: ‘李四’, ‘年龄’: 30, ‘城市’: ‘上海’},
    {‘姓名’: ‘王五’, ‘年龄’: 28, ‘城市’: ‘广州’}
]

这样拿数据就方便多了,不用记位置,直接“点名”:

  • 拿第一个用户的城市:user_list[0][‘城市’],结果就是‘北京’
  • 拿第二个用户的姓名:user_list[1][‘姓名’],结果就是‘李四’

这种方式更清晰,不容易出错,尤其是在表有很多列的时候优势明显。

把整个列表都遍历一遍(逐个检查) 大多数时候,我们拿回一个数据列表,是想对里面的每一个数据都做点事情,给所有用户发一封邮件,或者把所有人的年龄加起来算个平均值,这时候,我们就需要用循环来遍历整个列表。

循环就像你手里拿着一张名单,从上到下一个个看过去,每看一个名字就执行一个操作,用代码写出来大概是这个感觉:

for user in user_list:  # 对于user_list里的每一个user,挨个来
    print(“用户姓名是:” + user[‘姓名’])  # 打印出当前这个用户的姓名
    print(“用户年龄是:” + str(user[‘年龄’])) # 打印出年龄

这样,程序就会自动地、一个接一个地把列表里所有用户的信息都打印出来,你可以在循环里做任何事,比如计算、判断、再把数据存入另一个列表等等。

从数据库提取列表数据,本质是执行SQL查询拿到结果集,使用列表数据时,关键是根据数据的存储结构(是有序排列还是键值对),通过索引位置或者键名来 pinpoint 到你需要的具体值,而要对大量数据进行批处理,循环遍历是最强大的工具,记住这几点,处理起列表数据来基本就能上手了。