SQL Server,Python,百万数据入库,常见问题

一、百万数据入库测试结果


1、读取数据

追求速度问题,使用csv缓存,从csv中获取数据,速度最快

pymssql模块:使用execute, 然后fetchall(),速度在 7min 左右

pandas read_sql:速度差不多,数据量大,速度有优势

pyodbc模块、pyodbc模块待测试,速度应该会没差别

pandas模块 read_csv:直接从csv文件取相同数据,read_csv(),只需几秒。


2、百万DataFrame 入库:

pymssql模块:10分钟

  • execute和executemany(遍历execute,坑爹)是一条条的插入,超级慢

  • 拼接sql,value后面最多接1000条数据。速度大概在10分钟作用

pyodbc模块:3分钟

  • 设置fast_executemany=True,只需3分钟就可以完成,设置1W参数,然后遍历executemany,速度最快(还需要测试)

pandas模块 :3分钟

  • 原始状态就是一条条插入,速度太慢,10几个小时吧
    2、修改conn,设置为fast_executemany=True,即底层调用pyodbc模块,速度3分钟左右

调用java模块 :2分钟

  • 速度在几十秒,但是写成csv需要1分钟多,然后java从csv读数据写入sql server只需几十秒

bulk insert方式:1分钟

  • 几秒完成,百万数据写入csv需要1分钟,但是遇到code3(路径)和code5的错误(权限),还需要解决。

pyodbc vs turbodbc

to_sql用于将pandas DataFrame上传到SQL Server时,turbodbc肯定会比pyodbc更快fast_executemany=False,但是,fast_executemany=True的pyodbc,两种方法都会产生基本相同的性能。1W行100列的DataFrame,平均30秒左右。



二、FAQ

环境:win10,sql server 2016

1、conn = 'DRIVER={SQL Server Native Client 11.0};SERVER=xxxx;DATABASE=xxx;UID=xxxx;PWD=xxxx'

这里driver必须选择11.0版本

2、to_sql一直显示create附近语法错误,还有一个问题是,to_sql执行成功,无任何错误,但数据库没有数

ERROR:sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near 'BIGINT'.

原因是bak.[51card_speed_up_test]带了括号,而to_sql不会自己转义,去掉括号就能解决。

3、密码错误,接口参数不对sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('28000', "[28000]

4、这里para为60W的时候不能组装。当数据为100左右的时候,能自己组装。

ERROR:sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('The SQL contains -66 parameter markers, but 65470 parameters were supplied', 'HY000')。cursor.execute(statement, parameters)

5、使用上下文模式

with engine.begin() as conn:
    df.to_sql(name='my_balance', con=conn, if_exists='append',
              index=False, index_label='id')
    # 故意出现错误的代码,测试事物回滚
    df1.to_sql(name='my_balance', con=conn, if_exists='append')

后续:

  • 多线程入库,没有尝试成功,多个connect 或者 单个con和多个cursor 也没有解决。查询资料是说没有pyodbc 模块速度快。
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python将Excel数据导入到SQL Server数据库,可以使用如下步骤: 1. 安装所需库:首先,需要安装xlrd库,用于读取Excel文件的数据;同时,还需要安装pymssql库,用于连接和操作SQL Server数据库。 2. 导入库:在Python代码中,导入所需的库,包括xlrd和pymssql库。 3. 连接到数据库:使用pymssql库提供的连接函数,连接到SQL Server数据库。需要提供数据库的主机名/ IP地址、端口号、数据库名称、用户名和密码等信息。 4. 读取Excel数据:使用xlrd库提供的函数,读取Excel文件的数据。可以指定需要读取的Sheet名称或索引,然后使用循环逐行读取数据。 5. 插入数据数据库:使用pymssql库提供的SQL执行函数,将读取到的Excel数据插入到SQL Server数据库中。可以使用INSERT语句构建插入语句,并将Excel数据的值作为参数传递给执行函数。 6. 关闭数据库连接:在完成数据插入操作后,使用pymssql库提供的关闭连接函数,关闭与SQL Server数据库的连接。 需要注意的是,在执行插入操作之前,可能需要创建对应的数据库表和列,以确保插入操作可以成功。 总结: 通过使用xlrd库读取Excel数据,再使用pymssql库连接和操作SQL Server数据库,可以实现将Excel数据导入到SQL Server数据库的功能。这种方法适用于小规模的数据导入操作,如果需要导入大量数据,可能需要考虑性能优化的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值