2

Newdataがx列のリストである場合、一意の列の数(最初のタプルのメンバーの数)をどのように取得しますか。(レンは重要ではありません。)「?」の数を変更します。列を照合し、以下のステートメントを使用して挿入します。

csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
4

2 に答える 2

4

「Newdataはx列のリストです」とは、x タプルを意味していると思いますが、それ以来、「最初のタプル」について話し続けています。Newdataがタプルのリストである場合y = len(Newdata[0])、それらのタプルの最初の 1 つに含まれるアイテムの数です。

それがあなたが望む数であると仮定すると(そしてすべてのタプルに同じ数のアイテムが必要です。そうでなければexecutemany 失敗します!)、@ Nathanの答えの一般的な考え方は正しいです:カンマで区切られた適切な数の疑問符で文字列を構築します:

holders = ','.join('?' * y)

次に、SQL ステートメントの残りの部分に挿入します。@Nathan の挿入方法は、ほとんどの Python 2.any バージョンに適していますが、2.6 以降の場合は、

sql = 'INSERT INTO testdata VALUES({0})'.format(holders)

が現在推奨されています (Python 3.any でも動作します)。

ついに、

csr.executemany(sql, Newdata)

あなたが望むことをします。完了したら、忘れずにトランザクションをコミットしてください!-)

于 2010-09-17T03:55:03.197 に答える
0

のすべての要素で最大数のアイテムを探している場合は、次のようになりますNewdata

num_columns = max(len(t) for t in Newdata)

もちろん、これはpython2.5以降を想定しています。

あなたが試みていることがうまくいくかどうかはわかりませんが、insertステートメントは次のようになります。

sql = "INSERT INTO test.data VALUES(%s)"% "、"。join('?' * num_columns)

于 2010-09-17T03:30:21.403 に答える