带fetchmany的python数据库API列表转换

2024-09-28 21:56:35 发布

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

我试图从一个数据库服务器获取数据并加载到另一个数据库服务器。我打开了两个游标,在一个游标中获取数据并准备结果,以便在第二个游标上运行“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'>
>>>

Tags: inpynoneexecutelibpackagesusrline