You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将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

火山引擎 最新活动