Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从SQL server获取一百万条记录并保存到dataframe_Python_Sql Server_Pandas - Fatal编程技术网

Python 从SQL server获取一百万条记录并保存到dataframe

Python 从SQL server获取一百万条记录并保存到dataframe,python,sql-server,pandas,Python,Sql Server,Pandas,我正在尝试从SQL server数据库获取数据(只是一个简单的SELECT*查询) 该表包含大约300-500万条记录。直接使用SSMS在SQL server上执行SELECT*大约需要11-15分钟 然而,当我通过Python连接并试图将数据保存到pandas数据帧中时,这需要花费很长时间。一个多小时 以下是我正在使用的代码: import pymssql import pandas as pd startTime = datetime.now() ## instance a python

我正在尝试从SQL server数据库获取数据(只是一个简单的SELECT*查询)

该表包含大约300-500万条记录。直接使用SSMS在SQL server上执行SELECT*大约需要11-15分钟

然而,当我通过Python连接并试图将数据保存到pandas数据帧中时,这需要花费很长时间。一个多小时

以下是我正在使用的代码:

import pymssql
import pandas as pd

startTime = datetime.now()

## instance a python db connection object- same form as psycopg2/python-mysql drivers also

conn = pymssql.connect(server=r"xyz", database = "abc", user="user",password="pwd")  
print ('Connecting to DB: ',datetime.now() - startTime )


stmt = "SELECT * FROM BIG_TABLE;"
# Excute Query here
df_big_table = pd.read_sql(stmt,conn)

一定有更好的方法吗?可能是并行处理或是快速获取数据的东西

我的最终目标是将此表从SQL server迁移到PostGres

我就是这样做的:

  • 使用python从SQL server获取数据
  • 将其保存到数据帧中
  • 将此数据以CSV格式保存到磁盘
  • 将CSV从磁盘复制到Postgres
  • 当然,我可以结合步骤3、4,这样我就可以在内存中进行转换,而不是使用磁盘IO

    有许多复杂性,如表约束和定义等,我将在后面加以注意。我不能使用第三方工具

    我被困在步骤1,2。因此,非常感谢您对Python脚本/其他开源语言的帮助


    如果有任何其他方法可以达到我的最终目标,我欢迎你的建议

    您是否尝试过使用pandas.read\u sql的“chunksize”选项?您可以将所有这些都放到一个数据帧中,并生成csv


    如果需要更多时间,那么您可以使用pandas.read_sql作为迭代器将每个块分割成多个文件,然后在完成工作后将这些文件合并成一个文件并提交给postgres。

    您是否尝试过使用pandas.read_sql的“chunksize”选项?您可以将所有这些都放到一个数据帧中,并生成csv


    如果需要更多的时间,那么你可以使用pandas.read_sql作为迭代器将每个块分割成多个文件,然后在完成工作后将这些文件合并成一个文件并提交给postgres。

    你看到了吗?@BalajiAmbresh,谢谢,我在这个链接上找到了它,但正如我所说的,我现在不需要使用授权工具。如果可能的话,我必须首先尝试开源。从manula的一些工作开始,这肯定是可能的。如果是这样的话,为什么不将数据从ms sql导出到csv,并将csv导入postgres?这个过程必须安排好,hecne编写python脚本以实现自动化。如果是这样的话,从python脚本调用db命令是比使用pandas更好的解决方案。你看到了吗?@BalajiAmbresh,谢谢,我在这个链接上发了言,但正如我所说的,我现在不必使用授权工具。如果可能的话,我必须首先尝试开源。从manula的一些工作开始,这肯定是可能的。如果是这样的话,为什么不将数据从ms sql导出到csv,并将csv导入postgres?这个过程必须安排好,hecne编写python脚本以实现自动化。如果是这样的话,从python脚本调用db命令比使用pandas更好。