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()
Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top