如何将CSV文件中的多行文本(含缩进)插入SQLite数据库
如何将CSV中带缩进的多行文本完整插入SQLite数据库
嘿,这个问题我之前帮不少开发者解决过,核心就是要完整保留原始的换行、缩进字符,同时避开CSV解析和SQL插入时的转义/拆分坑。下面一步步给你讲清楚操作方法:
1. 先确保正确解析CSV中的多行字段
CSV规范里,带换行的字段必须用双引号包裹,否则普通解析器会把换行当成新的记录行,导致数据错乱。如果你的CSV已经符合这个规范,直接用编程语言的标准CSV解析库就能正确读取:
Python示例(最常用的处理方式)
import csv # 读取CSV,确保多行字段被完整识别 with open('your_data.csv', 'r', newline='', encoding='utf-8') as csv_file: # DictReader会自动把第一行作为列名 reader = csv.DictReader(csv_file) for row in reader: # 这里的row['Column2']已经完整保留了原始的换行和缩进 # 用repr()可以查看原始字符(比如\n表示换行,空格表示缩进) print("原始字段内容:") print(row['Column2']) print("\n原始字符表示:") print(repr(row['Column2']))
如果你的CSV没给多行字段加双引号,得先预处理:可以用文本编辑器的批量替换,或者写个小脚本给包含换行的字段加上双引号,避免解析出错。
2. 用参数化查询插入SQLite
SQLite的TEXT类型可以存储任意字符(包括换行、空格、制表符),关键是绝对不要直接拼接SQL语句,要用参数化查询——这样既自动处理转义,又避免SQL注入风险。
完整插入代码示例
import csv import sqlite3 # 连接SQLite数据库(不存在则自动创建) conn = sqlite3.connect('your_database.db') cursor = conn.cursor() # 创建目标表(如果还没创建) cursor.execute(''' CREATE TABLE IF NOT EXISTS your_table ( Id INTEGER PRIMARY KEY, Column1 TEXT, Column2 TEXT ) ''') # 读取CSV并插入数据 with open('your_data.csv', 'r', newline='', encoding='utf-8') as csv_file: reader = csv.DictReader(csv_file) for row in reader: # 用?作为占位符,参数放在元组里传入 cursor.execute(''' INSERT INTO your_table (Id, Column1, Column2) VALUES (?, ?, ?) ''', (row['Id'], row['Column1'], row['Column2'])) # 提交更改并关闭连接 conn.commit() conn.close()
3. 验证数据是否完整保存
插入后可以查询验证,确认换行和缩进都没丢:
import sqlite3 conn = sqlite3.connect('your_database.db') cursor = conn.cursor() # 查询Id=1的记录 cursor.execute('SELECT Column2 FROM your_table WHERE Id = 1') saved_content = cursor.fetchone()[0] print("从数据库取出的内容:") print(saved_content) print("\n原始字符验证:") print(repr(saved_content)) # 会显示包含\n和空格的原始字符串
关键注意事项
- CSV格式规范:必须给多行字段加双引号,否则解析器会拆分数据。
- 编码统一:读取CSV和连接数据库都用
utf-8编码,避免乱码。 - 禁用字符串拼接SQL:直接拼接会因为换行、引号等字符导致语法错误,还可能引发安全问题。
内容的提问来源于stack exchange,提问作者Shiv




