0
あるデータベースサーバーからデータをフェッチして別のデータベースサーバーにロードしようとしています。私は2つのカーソルを開いていて、1つのカーソルにデータをフェッチして、結果をプリペアして2番目のカーソルに "executemany" INSERTステートメントを実行します。python DB API - fetchmanyを使用したリスト変換
"executemany"を実行するための結果をそのまま使用できません。リストへの変換、リストへのコピーなどを試みましたが、何も動作していないようです。しかし、手動で結果をクリップボードにコピーし、リストとして再度ペーストすると、INSERTが機能します。私はここで何が欠けているか分からない。以下
>>> 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'>
>>>