我不是繁重的编码开发人员,但是我有这个问题 我有一个ID数据集-时间序列-SQL上的速度
我想将基于ID唯一值的数据集划分为1700个CSV文件(ID的唯一编号)
当我运行以下代码时,Windows停止工作。我需要通过动态SQL或其他方式来做相同的事情。
P.S。数据库是3亿行
import pyodbc
import numpy as np
import pandas as pd
db = pyodbc.connect("Driver={SQL Server Native Client 11.0};" "Server=ServerName;""Database;""Trusted_Connection=yes;")
df = pd.read_sql_query("SELECT* from DataBase", db)
ID = df['ID'].unique()
dfs={}
SR=()
for i, S in enumerate(ID):
dfs[i]=df[df['ID']==S]
filename=S+'.CSV'
df.to_csv(filename)
答案 0 :(得分:0)
我太新了,无法发表评论,对不起,如果下面的代码不起作用。如果您有任何问题或不了解如何修改此代码以使其适合您的答案,请对此答案发表评论。 像您对问题的评论一样,我建议您:
-获取所有唯一的列名称
-通过遍历唯一ID来查询数据库的较小块
import pandas as pd
db = pyodbc.connect("Driver={SQL Server Native Client 11.0};" "Server=ServerName;""Database;""Trusted_Connection=yes;")
df_ID = pd.read_sql_query("SELECT Distinct ['ID'] from DataBase", chunksize=1000, db)
ID = df_ID['ID'].tolist()
for i in ID:
df = pd.read_sql_query("SELECT * from DataBase Where ['ID'] = " + i, db)
filename=str(i) +'.CSV'
df.to_csv(filename)
我使用sqlalchemy对SQL DB运行查询,但是我想我已经正确了。
答案 1 :(得分:0)
您说您的数据库中有3亿行,但是我不确定在ID列上执行唯一操作时最终会获得多少行?
我假设3亿。您可以对所有1700个已划分的数据帧制作一个字典,然后从那里保存所需的数据帧。import pyodbc
import numpy as np
import pandas as pd
db = pyodbc.connect("Driver={SQL Server Native Client 11.0};" "Server=ServerName;""Database;""Trusted_Connection=yes;")
df = pd.read_sql_query("SELECT* from DataBase", db)
ID = df['ID'].unique()
ID=ID.assign(divider=ID.index//1700)
d = {y:x for y,x in ID.groupby('divider')}
#save first dataframe
d[0].to_csv('first.csv',columns=['ID'],index=False)
这应该为您节省一些内存。