我试图从一个数据库服务器获取数据并加载到另一个数据库服务器。我打开了两个游标,在一个游标中获取数据并准备结果,以便在第二个游标上运行“executemany”INSERT语句
我不能像运行“executemany”那样使用结果;我尝试了转换为列表、复制到列表等,但似乎没有任何效果。但当我手动将结果复制到剪贴板并作为列表粘贴回来时,我的插入就起作用了。不知道我在这里遗漏了什么。在
>>> scur.execute("select top 3 * from db1.dbo.job")
<pyodbc.Cursor object at 0x7f9c2a1b2930>
>>> rows = scur.fetchall()
>>> rows
[(1127, u'', u'8196660', u'', u'', 0, u'', u'', None, 35, None, 0, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, u'', 0, None, None), (1128, u'', u'8196638', u'', u'', 0, u'', u'', None, 23, None, 0, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, u'', 0, None, None), (1129, u'', u'8195737', u'', u'', 0, u'', u'', None, 22, None, 0, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, u'', 0, None, None)]
>>> icur.executemany(stmt1, rows)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/impala/hiveserver2.py", line 286, in executemany
self.execute(operation, parameters)
File "/usr/lib/python2.6/site-packages/impala/hiveserver2.py", line 187, in execute
configuration=configuration)
File "/usr/lib/python2.6/site-packages/impala/hiveserver2.py", line 205, in execute_async
self._execute_async(op)
File "/usr/lib/python2.6/site-packages/impala/hiveserver2.py", line 220, in _execute_async
operation_fn()
File "/usr/lib/python2.6/site-packages/impala/hiveserver2.py", line 198, in op
parameters)
File "/usr/lib/python2.6/site-packages/impala/interface.py", line 254, in _bind_parameters
raise ProgrammingError("Query parameters argument should be a "
impala.error.ProgrammingError: Query parameters argument should be a list, tuple, or dict object
# I am copying the above "rows" to clip board and pasting back
>>> rows_copy = [(1127, u'', u'8196660', u'', u'', 0, u'', u'', None, 35, None, 0, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, u'', 0, None, None), (1128, u'', u'8196638', u'', u'', 0, u'', u'', None, 23, None, 0, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, u'', 0, None, None), (1129, u'', u'8195737', u'', u'', 0, u'', u'', None, 22, None, 0, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, u'', 0, None, None)]
>>> icur.executemany(stmt1, rows_copy)
# Rows are inserted into the database
>>>
>>> if rows == rows_copy:
... print "same"
... else:
... print "not same"
...
not same
>>>
>>> type(rows)
<type 'list'>
>>> type(rows_copy)
<type 'list'>
>>>
下面就可以了
rowlist=[列(l)代表行中的l]
相关问题 更多 >
编程相关推荐