Utilizzando Python rapido inserimento molte colonne in Sqlite \ Mysql
-
03-10-2019 - |
Domanda
Se Newdata è elenco di colonne x, come otterrebbe il numero colonne univoche - numero dei membri della prima tupla. (Len non è importante.) Cambiare il numero di "?" per abbinare le colonne e l'inserto utilizzando l'istruzione di seguito.
csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
Soluzione
Con il termine "Newdata è elenco di colonne x", immagino si x
media tuple , da allora si continua a parlare di "prima tupla". Se Newdata
è una lista di tuple, y = len(Newdata[0])
è il numero di elementi nella prima una di quelle tuple.
Supponendo che è il numero che si desidera (e tutte le tuple era meglio avere lo stesso numero di elementi, altrimenti executemany
fallire!), L'idea generale di @ risposta di Nathan ha ragione: costruire la stringa con il numero appropriato di punti interrogativi separati da virgole:
holders = ','.join('?' * y)
poi inserirlo nel resto della istruzione SQL. @ Modo di Nathan per inserto è giusto per la maggior parte delle versioni 2.any Python, ma se avete 2.6 o meglio,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
è attualmente preferita (funziona anche in Python 3.any).
Infine,
csr.executemany(sql, Newdata)
farà ciò che desideri. Ricordarsi di commit della transazione una volta che il gioco è fatto! -)
Altri suggerimenti
Se stai cercando per il numero massimo di elementi in tutti gli elementi in Newdata
, è semplicemente:
num_columns = max(len(t) for t in Newdata)
Questo, naturalmente, presuppone pitone 2,5 o superiore.
Non è che io sono sicuro di quello che stai tentando avrebbe funzionato, ma la dichiarazione dell'inserto diventerebbe:
sql = "INSERT INTO VALORI test.data (% s)" % "". Join ( '?' * Num_colonne)