L'utilisation rapide Python insertion de colonnes dans SQLite \ Mysql
-
03-10-2019 - |
Question
Si Newdata est la liste des colonnes x, comment obtenir le nombre de colonnes uniques - nombre de membres du premier tuple. (Len est pas important.) Changer le nombre de « ? » pour correspondre à colonnes et insérer en utilisant l'instruction ci-dessous.
csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
La solution
Par « Newdata est la liste des colonnes de x », je suppose que vous x
moyen tuples , puisque vous continuez à parler de « la première tuple ». Si Newdata
est une liste de tuples, y = len(Newdata[0])
est le nombre d'éléments dans le premier de ces tuples.
En supposant que est le numéro que vous voulez (et tous les tuples avait mieux avoir le même nombre d'éléments, sinon executemany
échouer!), L'idée générale dans @ la réponse de Nathan est juste: construire la chaîne avec le nombre approprié de points d'interrogation séparés par des virgules:
holders = ','.join('?' * y)
puis l'insérer dans le reste de l'instruction SQL. @ La manière de Nathan à insérer est bon pour la plupart des versions Python 2.Toutes, mais si vous avez 2,6 ou mieux,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
est actuellement préférée (il fonctionne aussi en Python 3.Toute).
Enfin,
csr.executemany(sql, Newdata)
va faire ce que vous désirez. Rappelez-vous de valider la transaction une fois que vous avez terminé -)
Autres conseils
Si vous cherchez le nombre maximum d'éléments dans tous les éléments Newdata
, il est tout simplement:
num_columns = max(len(t) for t in Newdata)
Ceci, bien sûr, suppose python 2,5 ou plus.
Non pas que je suis sûr de ce que vous essayez fonctionnerait, mais l'instruction d'insertion deviendrait alors:
sql = "VALEURS test.data INSERT INTO (% s)" % "". Join ( '?' * Num_columns)