Je tente d'insérer des données d'un dictionnaire dans une base de données. Je veux itérer sur les valeurs et les formater en conséquence, en fonction du type de données. Voici un extrait du code que j'utilise :
def _db_inserts(dbinfo):
try:
rows = dbinfo['datarows']
for row in rows:
field_names = ",".join(["'{0}'".format(x) for x in row.keys()])
value_list = row.values()
for pos, value in enumerate(value_list):
if isinstance(value, str):
value_list[pos] = "'{0}'".format(value)
elif isinstance(value, datetime):
value_list[pos] = "'{0}'".format(value.strftime('%Y-%m-%d'))
values = ",".join(value_list)
sql = "INSERT INTO table_foobar ({0}) VALUES ({1})".format(field_names, values)
except Exception as e:
print 'BARFED with msg:',e
Lorsque j'exécute l'algo en utilisant un échantillon de données (voir ci-dessous), j'obtiens l'erreur suivante :
TypeError : élément de séquence 0 : attendu string, int trouvé
Voici un exemple de données de type value_list qui donne l'erreur ci-dessus :
value_list = [377, -99999, -99999, 'f', -99999, -99999, -99999, 1108.0999999999999, 0, 'f', -99999, 0, 'f', -99999, 'f', -99999, 1108.0999999999999, -99999, 'f', -99999, 'f', -99999, 'f', 'f', 0, 1108.0999999999999, -99999, -99999, 'f', 'f', 'f', -99999, 'f', '1984-04-02', -99999, 'f', -99999, 'f', 1108.0999999999999]
Qu'est-ce que je fais de mal ?
68 votes
Soulution pour vous :
values = ",".join(map(str, value_list))