273 votes

TypeError : élément de séquence 0 : attendu string, int trouvé

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))

3voto

Shaina Raza Points 611

Vous pouvez d'abord convertir l'image de données entière en chaîne de caractères, puis effectuer l'opération, par ex.

df3['nID']=df3['nID'].astype(str)
grp = df3.groupby('userID')['nID'].aggregate(lambda x: '->'.join(tuple(x)))

1voto

Gata Points 59

Solution :

    email = ''.join([str(nip), settings.ORGANISATION_EMAIL_SUFFIX])

0voto

Les éléments de la liste ne sont pas au format chaîne de caractères. Pour cela, nous devons d'abord les convertir en chaîne de caractères, puis nous pouvons appliquer l'opération de jointure sur cette liste comme ci-dessous :

summary = [ str(i) for i in summary ]
summery = " ".join(summary)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X