想知道怎么把一个list直接存数据库里,定义好list后一步步操作讲解
- 问答
- 2026-01-21 14:45:35
- 1
想知道怎么把一个列表直接存到数据库里,这个需求很常见,比如你有一个购物车里的商品ID列表,或者是一串用户留言的标题,你想把它们一股脑儿存进数据库,而不是一个一个地存,下面我就用一个最简单的例子,一步步讲清楚怎么操作,我们假设你用的是 Python 语言和一个叫 SQLite 的轻量级数据库,因为它不用安装,直接就能用,最适合讲解。
第一步:准备好你的列表和数据库连接
你手里得有一个列表,我们定义一个简单的列表,里面是一些书名:
my_book_list = ["红楼梦", "三国演义", "水浒传", "西游记"]
光有列表还不行,你得先连接到数据库,在 Python 里,我们可以用内置的 sqlite3 模块。
import sqlite3
# 连接到数据库文件,如果不存在,它会被自动创建
conn = sqlite3.connect('my_database.db')
# 创建一个“游标”,你可以把它想象成一个帮你执行SQL命令的手
cursor = conn.cursor()
这样,我们就和数据库建立好联系了。
第二步:创建一张能存放列表的表
数据库里数据是存放在“表”里的,就像 Excel 工作表一样,所以我们需要先创建一张表,既然我们要存一个书名的列表,最简单的办法就是创建一张只有一列的表,这一列专门用来放书名。
# 执行一条SQL命令来创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS books (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- 这一列是自动增长的ID号,每个书名有一个唯一编号
book_name TEXT NOT NULL -- 这一列是书名,类型是文本,不能为空
)
''')
这里稍微解释一下(来源:SQL语法基本概念):
CREATE TABLE是创建表的命令。IF NOT EXISTS的意思是如果这张表不存在才创建,避免了重复创建报错。books是表的名字。id那一列是主键,它会自动从1开始增长,这样每本书都有个唯一标识,方便以后查找和管理。book_name就是我们用来存书名的列。
执行完这个,一张空表就在数据库里准备好了。
第三步:把列表里的数据“插入”到表中
这是最关键的一步,怎么把 my_book_list 这个列表里的所有书名,一次性存进数据库的 books 表里。
你不能直接把整个列表扔给数据库,需要用到 SQL 的 INSERT 语句,最笨的方法是一个一个地插入,用 for 循环:
for book in my_book_list:
cursor.execute("INSERT INTO books (book_name) VALUES (?)", (book,))
这个方法可行,但是效率不高,尤其是列表很长的时候,更专业、更高效的做法是使用 executemany() 方法(来源:Python sqlite3官方文档),这个方法专门用来一次性插入多条数据。
具体怎么做呢?executemany() 需要两个东西:
- 一条带占位符的 SQL 语句。
- 一个包含所有数据的列表,列表里的每个元素都是一组要插入的数据。
我们的 SQL 语句是:INSERT INTO books (book_name) VALUES (?)
问号 就是一个占位符,表示“这里等下会被实际的数据替换”。
我们的数据是 my_book_list,但它的样子是 ["红楼梦", "三国演义", ...],而 executemany() 期望的数据格式是:[("红楼梦",), ("三国演义",), ...],注意看,它需要是一个列表,里面每个元素是一个元组,哪怕元组里只有一个值,后面也要加个逗号。
所以我们需要稍微转换一下:
# 把列表中的每个元素变成单个元素的元组
data_to_insert = [(book,) for book in my_book_list]
# 使用executemany一次性插入所有数据
cursor.executemany("INSERT INTO books (book_name) VALUES (?)", data_to_insert)
这两行代码就完成了整个列表的插入工作,非常高效。
第四步:确认操作并关闭连接
在数据库操作中,你执行了修改(比如插入、删除、更新)之后,需要一个“确认”的动作,这个动作叫“提交”(commit),不然,你的更改可能只存在于内存里,并没有真正保存到数据库文件中,提交之后,还要记得关闭连接,释放资源。
# 提交事务,让所有操作生效 conn.commit() # 关闭连接 conn.close()
第五步:验证一下存进去了没
为了确认我们的操作成功了,可以写几行代码查一下看看。
# 重新连接数据库
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()
# 执行查询,选取books表里的所有数据
cursor.execute("SELECT * FROM books")
# 获取所有查询结果
all_books = cursor.fetchall()
# 打印结果
print(all_books)
# 关闭连接
conn.close()
你会看到终端打印出类似这样的结果:[(1, '红楼梦'), (2, '三国演义'), (3, '水浒传'), (4, '西游记')],这说明数据已经成功地、整整齐齐地躺在数据库里了,而且还自动带上了ID。
总结一下整个流程:
- 连接数据库:用
sqlite3.connect。 - 创建表:用
cursor.execute执行CREATE TABLE语句,设计好表的结构。 - 转换并插入数据:把普通的列表转换成由元组构成的列表,然后用
cursor.executemany配合INSERT ... VALUES (?)语句一次性插入。 - 提交和关闭:用
conn.commit()确认保存,然后用conn.close()关闭连接。
这就是把一个列表直接存入数据库的完整步骤,虽然这里用的是 SQLite 和书名列表,但思路是通用的,如果你用 MySQL 或 PostgreSQL,只是最开始连接数据库的方式不一样,后面插入数据的逻辑是完全相似的。

本文由瞿欣合于2026-01-21发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/84029.html
