2010-09-17 4 views
2

Si Newdata est une liste de x colonnes, comment obtiendrait le nombre de colonnes uniques - nombre de membres du premier tuple. (Len n'est pas important.) Changer le nombre de "?" pour faire correspondre les colonnes et insérer en utilisant l'énoncé ci-dessous.Utilisation de Python quick insérez plusieurs colonnes dans Sqlite Mysql

csr = con.cursor() 
csr.execute('Truncate table test.data') 
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata) 
con.commit() 

Répondre

3

Par "Newdata est la liste des colonnes de x", je suppose que vous voulez dire xtuples, depuis lors, 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 c'est le numéro que vous voulez (et tous les tuples il vaut mieux avoir le même nombre d'éléments, sinon executemanyva échouer!), L'idée générale @ 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 insérez-le 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) 

fera ce que vous désirez. N'oubliez pas de valider la transaction une fois que vous avez terminé! -)

0

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.

sql = "INSERT INTO test.data VALEURS (% s)" % "" rejoindre ('?' * num_columns)

Questions connexes