相关疑难解决方法(0)

如何使用pyodbc从CSV加速批量插入到MS SQL Server

下面是我想要帮助的代码.我不得不运行超过1,300,000行,这意味着插入~300,000行需要40分钟.

我认为批量插入是加速它的路线?或者是因为我通过for data in reader:部分迭代行?

#Opens the prepped csv file
with open (os.path.join(newpath,outfile), 'r') as f:
    #hooks csv reader to file
    reader = csv.reader(f)
    #pulls out the columns (which match the SQL table)
    columns = next(reader)
    #trims any extra spaces
    columns = [x.strip(' ') for x in columns]
    #starts SQL statement
    query = 'bulk insert into SpikeData123({0}) values ({1})'
    #puts column names in SQL query 'query'
    query = query.format(','.join(columns), ','.join('?' * len(columns)))

    print 'Query is: %s' …
Run Code Online (Sandbox Code Playgroud)

python sql-server bulkinsert pyodbc sql-server-2012

26
推荐指数
2
解决办法
5万
查看次数

在Python中,使用pyodbc,如何执行事务?

我有一个用户名,我必须在很多(最多约25个)表中进行更改.(是的,我知道.)原子事务似乎是这种事情的方法.但是,我不知道如何用pyodbc做到这一点.我以前见过关于原子事务的各种教程,但从未使用它们.

设置:Windows平台,Python 2.6,pyodbc,Microsoft SQL 2005.我已经将pyodbc用于单个SQL语句,但没有使用复合语句或事务.

SQL的最佳实践似乎表明创建存储过程非常适合这种情况.我对执行存储过程的担心如下,按重要性递增:1)我从未编写过存储过程.2)我听说pyodbc还没有返回存储过程的结果.3)这绝对不是我的数据库.它是供应商提供的,供应商更新的,等等.

那么,最好的方法是什么?

python transactions pyodbc

6
推荐指数
2
解决办法
1万
查看次数

使用 pyodbc + SQL Server 进行批量插入,使用 None/Nan + 解决方法很慢

问题是试图将数据上传到 SQL Server 并获得每秒 122 行(17 列)的速度。我决定在此处发布问题以及解决方法,希望有人知道最终答案。

我发现的最相关的线程是但问题显着不同并且仍然没有答案: pyodbc - 非常慢的批量插入速度

这是一个简单的场景,我尝试使用 Python 将 350K 行的 CSV 上传到空白的 SQL Server 表中。在尝试了一种最流行的方法后,即将其作为pandas DataFrame 读取,创建一个带有fast_executemany=True 的sql_alchemy 引擎并使用to_sql() 方法存储到数据库中。我得到了 122 行/秒,这是不可接受的。

正如其他线程中提到的,这不会发生在 PostgreSQL 或 Oracle 中,我可以补充说,它也不会发生在 MariaDB 中。所以我尝试了一种不同的方法,使用 pyodbc cursor.executemany() 来查看 pandas 或 sql_alchemy 中是否存在错误。速度一样。

下一步是生成合成数据来复制问题以提交错误……令我惊讶的是,生成的数据大约为 8000 条记录/秒。跆拳道?数据使用的数据类型(显然)与 CSV 中的数据类型相同。

经过数周的尝试,我决定研究 pydobc 本身。在 pyodbc github 开发站点中,我在https://github.com/mkleehammer/pyodbc/wiki/Binding-Parameters 中发现了一条有趣的信息,特别是在Writing NULLSolutions and Workarounds部分。

事实上,CSV 第一行的 17 个字段中有 3 个被我手动转换为 Pandas 中的“Nan”或 None 。令我惊讶的是,将这些 None/Nan/NULL 替换为FIRST LINE ONLY上的有效值,将速度提高到 7-8000 …

python sql-server pyodbc

5
推荐指数
1
解决办法
619
查看次数