使用Python或R将非常大的sql文件导出到csv

2024-03-28 23:06:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的sql文件(20gb),我想转换成csv。我打算把文件装入Stata进行分析。我有足够的内存来加载整个文件(我的计算机有32GB的内存)

问题是:到目前为止,我在Python上找到的解决方案(sqlite3)似乎需要比当前系统更多的RAM:

  • 阅读SQL
  • 编写csv

这是密码

import sqlite3
import pandas as pd

con=sqlite3.connect('mydata.sql')
query='select * from mydata'
data=pd.read_sql(query,con)
data.to_csv('export.csv')
con.close()

sql文件包含大约15个变量,可以是时间戳、字符串或数值。没什么特别的。

我认为一种可能的解决方案是一次读取sql并写入csv文件一行。但是,我不知道如何做到这一点(在R或Python中)

任何帮助都非常感谢!


Tags: 文件csv内存importsqldata系统计算机
3条回答

在Windows命令行或UNIX shell中使用sqlite3命令行程序,如下所示:

sqlite3 -csv "mydata.sql" "select * from mydata;" > mydata.csv

如果mydata.sql不在当前目录中,请使用路径,在Windows上使用正斜杠而不是反斜杠。

交替运行sqlite3

sqlite3

并在sqlite提示下输入以下命令:

.open "mydata.sql"
.ouptut mydata.csv
.mode csv
select * from mydata;
.quit

(或者把它们放到一个名为run的文件中,比方说,并使用sqlite3 < run

在mysql数据库中加载.sql文件并将其导出为CSV。

在mysql数据库中加载mysql转储文件的命令。

创建MySQL数据库

create database <database_name>

mysqldump -u root -p <database_name> < dumpfilename.sql

命令将MySQL表导出为CSV

mysql -u root -p
use <database_name>

SELECT * INTO OUTFILE 'file.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
FROM <table_name>;

您可以成批读取SQL数据库并将其写入文件,而不是一次读取整个数据库。有关如何添加到现有CSV文件的信息,请记入How to add pandas data to an existing csv file?

import sqlite3
import pandas as pd

# Open the file
f = open('output.csv', 'w')
# Create a connection and get a cursor
connection = sqlite3.connect('mydata.sql')
cursor = connection.cursor()
# Execute the query
cursor.execute('select * from mydata')
# Get data in batches
while True:
    # Read the data
    df = pd.DataFrame(cursor.fetchmany(1000))
    # We are done if there are no data
    if len(df) == 0:
        break
    # Let's write to the file
    else:
        df.to_csv(f, header=False)

# Clean up
f.close()
cursor.close()
connection.close()

相关问题 更多 >