我有一个大的sql文件(20GB),我想转换成csv。我计划将文件加载到Stata中进行分析。我有足够的ram来加载整个文件(我的计算机有32GB的ram)
问题是:到目前为止,我在线找到的Python解决方案(sqlite3)似乎比我当前的系统需要更多的RAM:
这是密码
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中)
非常感谢您的帮助!
您可以批量读取SQL数据库并将它们写入文件,而不是一次读取整个数据库。如何将熊猫数据添加到现有csv文件?有关如何添加到现有CSV文件的信息。
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()
在Windows cmd行或UNIX shell中使用sqlite3命令行程序,如下所示:
sqlite3 -csv "mydata.sql" "select * from mydata;" > mydata.csv
如果是我的数据。sql不在当前目录中,请使用路径,在Windows上使用正斜杠而不是反斜杠。
交替运行sqlite3
sqlite3
并在sqlite提示符下输入以下命令:
.open "mydata.sql"
.ouptut mydata.csv
.mode csv
select * from mydata;
.quit
(或者把它们放在一个名为run
的文件中,然后使用sqlite3
匿名用户
加载。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>;
相关问题
- Android:在模块jefied-play-services-测量和jefied-play-services-测量-impl中发现重复类
- HashMap如何跟踪entrySet等字段
- @BeforeClass在ktor测试类中不工作
- Jest vanilla JavaScript JSDOM刷新失败,切换beforeAll到before每一个后的第二次测试中断
- 玩笑未解决的promise不会失败
- 在笑话中,定义全局变量是否与在BeforeAll中定义相同?
- 静态编程语言中@BeforeAll的正确解决方法是什么
- 线程“main”java. lang.NoClassDefFoundError中的异常:在Intellij[Spring boot]中
- 线程“main”java. lang.NoClassDefFoundError中的异常:org/apache/log4j/ProvisionNode
- log4j2 java. lang.NoClassDefFoundError:org/apache/log/log4j/LogManager
- AngularJs-RXJS可观察退订
- 组件中的Angular 2重复订阅
- AngularJS-$销毁是否删除事件侦听器?
- 服务如何订阅当前路由的ParamMap?
- 应该在ngOnDestroy()中将Angular组件变量设置为null吗?
- 我必须取消订阅ActivatedRoute(例如参数)可观察对象吗?
- Angular:定期请求时如何取消订阅
- Angular2处理非组件类中的订阅
- ReactiveXJS和TypeScript-如何退订?
- 由于订阅问题,AngularAPI被多次调用