gpt4 book ai didi

python - 使用 python 仅将 csv 文件中的特定行插入到 Sqlite3 数据库中

转载 作者:行者123 更新时间:2023-12-01 05:29:56 24 4
gpt4 key购买 nike

我正在尝试将 csv 文件导入到我使用 python 编写的 sqlite3 数据库中。我对以这种方式导入数据以及一般的 sqlite3 相当陌生。

我得到的数据文件在开始时往往有不规则的格式,但我想要的行总是以日期字段(dd/mm/yy)和时间字段(hh:mm:ss)开头。示例文件如下:

Hello I am a file, , , ,
I am a type of csv file, , , ,
Date, Time, ID number, Message
12/12/2012, 13:12:13, 1, Hello World
13/12/2012, 13:12:13, 2, Goodbye

所以我只想导入第 4 行和第 5 行(以及所有带有日期的后续行),但跳过描述文件和列标题的前 3 行。

到目前为止,我已经得到了读取数据的代码,然后将其与唯一标识符 (logID) 一起放入表中,但目前我只是从第 4 行开始读取 - 我想对于文件没有前 3 行简介的情况,这是一个更通用的解决方案。

#code above here opens the database and creates a cursor
with open(file) as csvfile:
reader = csv.reader(csvfile, dialect='excel')
for row in reader:
if reader.line_num >= 4:
values = logID + str(row[0]) + str(row[1]) + str(row[2]) + str(row[3])
cursor.execute("INSERT INTO table VALUES(" +values+ ");")

预先感谢您的帮助!

最佳答案

尝试将 row 中的第一项转换为 Python datetime.datetime目的。如果有效,则处理该行,如果无效,continue通过循环:

import datetime as DT
with open(file, 'rb') as csvfile:
reader = csv.reader(csvfile, dialect='excel')
for row in reader:
try:
date = DT.datetime.strptime(row[0], '%m/%d/%Y')
except ValueError:
continue
args = [logID] + row
sql = "INSERT INTO table VALUES ({})".format(', '.join(['?']*len(args)))
cursor.execute(sql, args)
<小时/>

以上内容适用于中小型 CSV。如果您有一个巨大的 CSV 文件,每行调用一次 cursor.execute 可能会很慢。为了提高性能,请一次读取一大块(例如 1000 行),然后累积要插入到列表列表中的值,manyargs。然后调用

cursor.executemany("INSERT INTO table VALUES(?,?,?,?,?)", manyargs)

每个 block 一次。

<小时/>

顺便说一句,用字符串格式构建 SQL 命令,例如:

cursor.execute("INSERT INTO table VALUES(" +values+ ");")

可能存在安全风险。恶意构造的 CSV 文件可以利用此行来运行任意 SQL 命令(请参阅 SQL injectionLittle Bobby Tables )。为了防止这种情况,请使用参数化 SQL:

cursor.execute("INSERT INTO table VALUES(?,?,?,?,?)", args)

? 是一个地标——每个字段值一个地标。 args 是一个包含您要插入的值的序列(例如元组或列表)。请注意,args 作为第二个参数传递给 cursor.execute。您不必将 args 中的值转换为字符串(尽管在本例中,它们是字符串,因为 csv.reader 生成字符串列表)。 sqlite3 模块将为您处理参数的引用。

关于python - 使用 python 仅将 csv 文件中的特定行插入到 Sqlite3 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20470701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com