2016-04-23 3 views
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'> 
>>> 

答えて

0

[行のLのためのリスト(L)]トリック

rowlist =を行います

関連する問題