Newdataがx列のリストである場合、一意の列の数(最初のタプルのメンバーの数)をどのように取得しますか。(レンは重要ではありません。)「?」の数を変更します。列を照合し、以下のステートメントを使用して挿入します。
csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
Newdataがx列のリストである場合、一意の列の数(最初のタプルのメンバーの数)をどのように取得しますか。(レンは重要ではありません。)「?」の数を変更します。列を照合し、以下のステートメントを使用して挿入します。
csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
「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)
あなたが望むことをします。完了したら、忘れずにトランザクションをコミットしてください!-)
のすべての要素で最大数のアイテムを探している場合は、次のようになりますNewdata
。
num_columns = max(len(t) for t in Newdata)
もちろん、これはpython2.5以降を想定しています。
あなたが試みていることがうまくいくかどうかはわかりませんが、insertステートメントは次のようになります。
sql = "INSERT INTO test.data VALUES(%s)"% "、"。join('?' * num_columns)