Al utilizar Python rápida inserción muchas columnas en SQLite \ MySQL
-
03-10-2019 - |
Pregunta
Si es NewData lista de columnas x, ¿cómo obtener las columnas de números únicos - número de miembros de la primera tupla. (Len no es importante.) Cambiar el número de "?" para que coincida con las columnas y la inserción mediante la instrucción a continuación.
csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
Solución
Por "lista de columnas x NewData es", me imagino que x
media tuplas , ya continuación, seguir hablando de "la primera tupla". Si Newdata
es una lista de tuplas, y = len(Newdata[0])
es el número de elementos en la primera de esas tuplas.
Si se asume que es el número que desea (y todas las tuplas había tener mejor el mismo número de elementos, de lo contrario executemany
fallar!), La idea general de @ respuesta de Nathan es correcta: Él construye la cadena con el número apropiado de signos de interrogación separados por comas:
holders = ','.join('?' * y)
A continuación, insertarlo en el resto de la instrucción SQL. @ Camino de Nathan de inserción es adecuado para la mayoría de las versiones 2.any Python, pero si usted tiene 2.6 o mejor,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
se prefiere actualmente (que también funciona en Python 3.any).
Por último,
csr.executemany(sql, Newdata)
hará lo que usted desea. Recuerde que debe confirmar la transacción una vez que haya terminado! -)
Otros consejos
Si usted está buscando el número máximo de elementos de todos los elementos en Newdata
, es simplemente:
num_columns = max(len(t) for t in Newdata)
Esto, por supuesto, asume pitón 2,5 o mayor.
No es que yo estoy seguro de lo que está intentando funcionaría, pero se convertiría entonces en la instrucción de inserción:
sql = "INSERT INTO VALORES test.data (% s)" % "". Join (núm_columnas '?' *)