用 Python 把 Excel 里的数据批量存进 SQLite 数据库

· 代码经验

平时做开发或者处理数据的时候,我们常常要把 Excel 表格里的内容存到数据库里,这样数据就能长期保存,也能做更多操作。Python 有很多现成的工具包,能让这件事变得特别简单。

这篇文章会用大家常用的 pandassqlite3 这两个库,一步步教你把 Excel 文件里的数据快速、批量地放进 SQLite 数据库里,整个过程不复杂,适合大多数有固定格式的数据。

需要先装的工具

开始之前,请先在电脑上安装下面这两个包:

pip install pandas openpyxl
注意:因为我们要读的是 .xlsx 文件,所以 pandas 要靠 openpyxl 才能打开它。

最简单的做法(直接上代码)

下面这段完整的脚本能读一个 Excel 文件,并把第一个工作表的内容写进 SQLite 数据库:

import sqlite3
import pandas as pd

def import_excel_to_sqlite(excel_path, db_path, table_name):
    """
    把 Excel 文件第一个工作表的内容存进 SQLite 数据库
    
    :param excel_path: Excel 文件的位置(支持 .xlsx)
    :param db_path: SQLite 数据库文件的位置
    :param table_name: 要存数据的表名(如果已经有就删掉重来)
    """
    # 先把 Excel 读成一个表格对象
    data_frame = pd.read_excel(excel_path, engine='openpyxl')
    
    # 然后连上数据库(要是没有这个文件,系统会自动新建一个)
    connection = sqlite3.connect(db_path)
    
    # 接着把表格内容直接写进数据库的指定表里
    data_frame.to_sql(table_name, connection, if_exists='replace', index=False)
    
    # 最后记得关掉连接
    connection.close()
    
    print(f"已经成功把 {excel_path} 的内容存进 {db_path} 里的 '{table_name}' 表了!")

# 举个例子怎么用
if __name__ == "__main__":
    excel_file = "data.xlsx"
    sqlite_database = "example.db"
    target_table = "employees"
    
    import_excel_to_sqlite(excel_file, sqlite_database, target_table)

想更灵活一点?可以自己控制字段和空值

如果你不想让程序自动决定字段类型,或者想好好处理那些空白的地方,可以先自己建好表结构,再一条条插数据:

import sqlite3
import pandas as pd
import numpy as np

def custom_excel_to_sqlite(excel_path, db_path, table_name):
    # 先读取 Excel 里的内容
    df = pd.read_excel(excel_path, engine='openpyxl')
    
    # 把表格里显示为 NaN 的地方换成 None,这样 SQLite 才认得
    df = df.replace({np.nan: None})
    
    # 连上数据库
    conn = sqlite3.connect(db_path)
    cur = conn.cursor()
    
    # 自己写 SQL 语句建表(字段你说了算)
    create_sql = f"""
    CREATE TABLE IF NOT EXISTS {table_name} (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        age INTEGER,
        salary REAL,
        department TEXT
    );
    """
    cur.execute(create_sql)
    
    # 如果表里原来有数据,先清空(这步可选)
    cur.execute(f"DELETE FROM {table_name}")
    
    # 一次性把所有行都插进去
    records = df.to_records(index=False)
    cur.executemany(
        f"INSERT INTO {table_name} (id, name, age, salary, department) VALUES (?, ?, ?, ?, ?)",
        records
    )
    
    conn.commit()
    conn.close()
    print("高级导入操作已经搞定!")

最后说两句

其实只要用 pandasread_excel()to_sql() 这两个功能,几行代码就能完成从 Excel 到 SQLite 的数据搬家。这种方法不仅适合小项目快速试手,也很容易加到自动运行的脚本或者网站后台里。以后要是遇到更复杂的任务,比如要连别的数据库或者做数据清洗,还可以搭配像 sqlalchemy 这样的工具一起用。