用Python实现从CSV到SQLite的快速数据移动
我有个问题。有数百个CSV文件,每个文件大约有1000000行。 我需要以一种特定的方式移动数据,但脚本工作速度非常慢(每小时只需要10个Tosand) 我的代码:用Python实现从CSV到SQLite的快速数据移动,python,sqlite,csv,Python,Sqlite,Csv,我有个问题。有数百个CSV文件,每个文件大约有1000000行。 我需要以一种特定的方式移动数据,但脚本工作速度非常慢(每小时只需要10个Tosand) 我的代码: import sqlite3 as lite import csv import os my_file = open('file.csv', 'r') reader = csv.reader(my_file, delimiter=',') date = '2014-09-29' con = lit
import sqlite3 as lite
import csv
import os
my_file = open('file.csv', 'r')
reader = csv.reader(my_file, delimiter=',')
date = '2014-09-29'
con = lite.connect('test.db', isolation_level = 'exclusive')
for row in reader:
position = row[0]
item_name = row[1]
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS [%s] (Date TEXT, Position INT)" % item_name)
cur.execute("INSERT INTO [%s] VALUES(?, ?)" % item_name, (date, position))
con.commit()
我发现了一条关于隔离级别和对数据库的单一访问的信息,但它并没有很好地工作
行CSV文件有一个结构:1,item1 | 2,item2
有人能帮我吗?谢谢 不要执行sql插入。首先准备CSV文件,然后执行以下操作:
.separator <separator>
.import <loadFile> <tableName>
分隔符
.进口
请参见此处:不要执行sql插入。首先准备CSV文件,然后执行以下操作:
.separator <separator>
.import <loadFile> <tableName>
分隔符
.进口
请参见此处:不要执行sql插入。首先准备CSV文件,然后执行以下操作:
.separator <separator>
.import <loadFile> <tableName>
分隔符
.进口
请参见此处:不要执行sql插入。首先准备CSV文件,然后执行以下操作:
.separator <separator>
.import <loadFile> <tableName>
分隔符
.进口
请参见此处:您当然不想为要插入的每一行创建一个新的游标对象,而检查每一行的表创建肯定会降低速度- 我建议分两步来做:第一步 在记录的第二次过程中,创建所需的表 数据。如果它仍然很慢,你可以做一个 更复杂的内存中数据收集 插入并执行“executemany”-但这将 在内存中按名称对数据进行分组需要一些复杂度 来之前
import sqlite3 as lite
import csv
import os
my_file = open('file.csv', 'r')
reader = csv.reader(my_file, delimiter=',')
date = '2014-09-29'
con = lite.connect('test.db', isolation_level = 'exclusive')
cur = con.cursor()
table_names = set(row[1] for row in reader)
my_file.seek(0)
for name in table_names:
cur.execute("CREATE TABLE IF NOT EXISTS [%s] (Date TEXT, Position INT)" % item_name)
for row in reader:
position = row[0]
item_name = row[1]
cur.execute("INSERT INTO [%s] VALUES(?, ?)" % item_name, (date, position))
con.commit()
您当然不想为要插入的每一行创建一个新的游标对象,而检查每一行的表创建肯定会降低速度- 我建议分两步来做:第一步 在记录的第二次过程中,创建所需的表 数据。如果它仍然很慢,你可以做一个 更复杂的内存中数据收集 插入并执行“executemany”-但这将 在内存中按名称对数据进行分组需要一些复杂度 来之前
import sqlite3 as lite
import csv
import os
my_file = open('file.csv', 'r')
reader = csv.reader(my_file, delimiter=',')
date = '2014-09-29'
con = lite.connect('test.db', isolation_level = 'exclusive')
cur = con.cursor()
table_names = set(row[1] for row in reader)
my_file.seek(0)
for name in table_names:
cur.execute("CREATE TABLE IF NOT EXISTS [%s] (Date TEXT, Position INT)" % item_name)
for row in reader:
position = row[0]
item_name = row[1]
cur.execute("INSERT INTO [%s] VALUES(?, ?)" % item_name, (date, position))
con.commit()
您当然不想为要插入的每一行创建一个新的游标对象,而检查每一行的表创建肯定会降低速度- 我建议分两步来做:第一步 在记录的第二次过程中,创建所需的表 数据。如果它仍然很慢,你可以做一个 更复杂的内存中数据收集 插入并执行“executemany”-但这将 在内存中按名称对数据进行分组需要一些复杂度 来之前
import sqlite3 as lite
import csv
import os
my_file = open('file.csv', 'r')
reader = csv.reader(my_file, delimiter=',')
date = '2014-09-29'
con = lite.connect('test.db', isolation_level = 'exclusive')
cur = con.cursor()
table_names = set(row[1] for row in reader)
my_file.seek(0)
for name in table_names:
cur.execute("CREATE TABLE IF NOT EXISTS [%s] (Date TEXT, Position INT)" % item_name)
for row in reader:
position = row[0]
item_name = row[1]
cur.execute("INSERT INTO [%s] VALUES(?, ?)" % item_name, (date, position))
con.commit()
您当然不想为要插入的每一行创建一个新的游标对象,而检查每一行的表创建肯定会降低速度- 我建议分两步来做:第一步 在记录的第二次过程中,创建所需的表 数据。如果它仍然很慢,你可以做一个 更复杂的内存中数据收集 插入并执行“executemany”-但这将 在内存中按名称对数据进行分组需要一些复杂度 来之前
import sqlite3 as lite
import csv
import os
my_file = open('file.csv', 'r')
reader = csv.reader(my_file, delimiter=',')
date = '2014-09-29'
con = lite.connect('test.db', isolation_level = 'exclusive')
cur = con.cursor()
table_names = set(row[1] for row in reader)
my_file.seek(0)
for name in table_names:
cur.execute("CREATE TABLE IF NOT EXISTS [%s] (Date TEXT, Position INT)" % item_name)
for row in reader:
position = row[0]
item_name = row[1]
cur.execute("INSERT INTO [%s] VALUES(?, ?)" % item_name, (date, position))
con.commit()
该代码效率低下,因为它对CSV中的每一行执行两条SQL语句。尝试优化
项目名称)
?如果是,您可以将要插入到同一个表中的行累加(为同一个表生成一组INSERT
语句),并且如果不存在CREATE table,则只在生成的语句集前面加一次前缀,而不是每一个
该代码效率低下,因为它对CSV中的每一行执行两条SQL语句。尝试优化
项目名称)
?如果是,您可以将要插入到同一个表中的行累加(为同一个表生成一组INSERT
语句),并且如果不存在CREATE table,则只在生成的语句集前面加一次前缀,而不是每一个
该代码效率低下,因为它对CSV中的每一行执行两条SQL语句。尝试优化
项目名称)
?如果是,您可以将要插入到同一个表中的行累加(为同一个表生成一组INSERT
语句),并且如果不存在CREATE table,则只在生成的语句集前面加一次前缀,而不是每一个
该代码效率低下,因为它对CSV中的每一行执行两条SQL语句。尝试优化
项目名称)
?如果是,您可以将要插入到同一个表中的行累加(为同一个表生成一组INSERT
语句),并且如果不存在CREATE table,则只在生成的语句集前面加一次前缀,而不是每一个
我也有同样的问题。现在问题解决了!我想与所有面临同样问题的人分享这些方法 我们使用sqlite3数据库作为示例,并使用其他数据库