Python 内置库包含 SQLite,这是一个自包含的、一个文件适合一切的 DBMS - 与通常的看法相反,它的性能非常好。如果要由单个应用程序在没有并发的情况下查询记录,则与专用 DBMS 相比,它需要单独的守护程序。
因此,本质上,您可以将 CSV 转储到 SQLITE 数据库并创建所需的索引——即使是在所有四列上(如果是这种情况)。
这是一个模板脚本,您可以自定义以创建这样的数据库 - 我猜测一次插入次数的“1000”数字,但它不是最佳的 - 尝试调整插入太慢。
import sqlite3
import csv
inserts_at_time = 1000
def create_and_populate_db(dbfilename, csvfilename):
db = sqlite3.connect(dbfilename)
db.execute("""CREATE TABLE data (col1, col2, col3, col4)""")
for col_name in "col1 col2 col3 col4".split():
db.execute(f"""CREATE INDEX {col_name} ON data ({col_name})""")
with open(csvfilanem) as in_file:
reader = csv.reader(in_file)
next(reader) # skips header row
total = counter = 0
lines = []
while True:
for counter, line in zip(range(inserts_at_time), reader):
lines.append(line)
db.executemany('INSERT INTO data VALUES (?,?,?,?)', lines)
total += counter
counter = 0
lines.clear()
print("\b" * 80, f"Inserted {counter} lines - total {total}")
if counter < inserts_at_time - 1:
break