对PYPYODBC使用executemany()

2024-09-29 22:32:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目目前正在使用pypyodbcPython库连接到DB2数据库,我的源是一个mssql服务器,我需要从中读取数据并将数据加载到DB2表中。数据量为百万行,我正试图使用executemany()方法在一次执行中加载50条记录,但始终收到错误:

data must be in a list, tuple or row

我确实使用了list函数来对我的光标结果进行类型转换,但它仍然不起作用。结果集中的数据采用[(record1),(record2)]格式。代码片段如下:

也尝试了对sql结果集元组进行类型转换

# use pypyodbc to establish a connection - db2_conn. 
cur = db2_conn.cursor()
cur.execute('...a query with 10 columns...')
result = cur.fetchmany(50)

insert_query = 'insert into db2_table (col1,col2,col3,...) values (?,?,?,..)'
cur.executemany(insert_query, list(result))
cur.commit()

Tags: 数据项目服务器数据库resultconnquerylist
1条回答
网友
1楼 · 发布于 2024-09-29 22:32:04

代码看起来没问题-请公布失败的确切代码。 我使用Db2作为源和目标测试了以下内容:

  1. 已创建源表和目标表
db2 "create table odbc_test(c1 int, c2 varchar(10))"
db2 "create table odbc_test_sorurce(c1 int, c2 varchar(10))"
  1. 用数据填充soruce
^{pr2}$
  1. 连接到数据库并获取行
import pyodbc
cnx = pyodbc.connect("DRIVER={DB2};HOSTNAME=localhost;DATABASE=sample;UID=xxxx;PWD=xxxxx;PROTOCOL=TCPIP;PORT=60115")
cnx.autocommit = False
cur = cnx.cursor()
cur.execute('select c1, c2 from odbc_test_sorurce')
result = cur.fetchmany(50)
  1. 这给了我一个结果列表:
In [16]: result
Out[16]: 
[(1, 'row1'),
 (2, 'row2'),
 (3, 'row3'),
 (4, 'row4'),
 (5, 'row5'),
 (6, 'row6'),
 (7, 'row7'),
...


In [17]: type(result)
Out[17]: list
  1. 插入效果很好:
cur.executemany("insert into odbc_test(c1, c2) values (?,?)", result)
cnx.commit()

相关问题 更多 >

    热门问题