Tener el siguiente código. Es muy fácil de ejecutar, solo mi problema es que lo ingresé 11 veces a la vez. Entonces, cuando ejecuto este código, copia el contenido 11 veces en la base de datos.

row 1
row 2
row 3 
...
row 11

Esto es lo que trato de generar:

{
    'note': '',
    'money': 76682.1200000005,
    'main': True,
    'deleted': False,
    '_id': '5e3e2bc4667b8d5fc053e9a1',
    'ownerCharacter': 
        {
            '_id': '5e3ddb08667b8d5fc052903d',
            'name': 'Name'
        }, 
    'bank': 
        {
            '_id': '5b36b968614626df322e5b75',
            'imageUrl': 'urlToIMG',
            'name': 'Savings Bank Paleto Bay'
        }, 
    'bankAccountType': 
        {
            'type': 'private',
            'title': '',
            'interestRate': 0.01,
            '_id': '5b36b968614626df322e5b76',
            'name': 'Giro-Konto',
            'bank': '5b36b968614626df322e5b75',
            '__v': 0
        }, 
    'vban': '460907', 
    'pin': '1234', 
    '__v': 0
}

Y este es el código:

def getData():
    databaseConn = dbConnect()
    cursor = databaseConn.cursor()

    delete = "TRUNCATE TABLE bank"
    try:
        cursor.execute(delete)
        databaseConn.commit()
    except:
        print("Delete error")

    money = json.loads(makeRequest("URL",  authToken, True).text)
    
    for amount in money:
        
        geld = str(money["money"])
        person = money["ownerCharacter"]["name"]

        sql = "INSERT INTO bank (menge,name) VALUES (%s,%s)"
        val = (geld,person)
        try:
            cursor.execute(sql, val)
            databaseConn.commit()
        except:
            print("Error Database")
    dbClose(databaseConn, cursor)

Solo lo necesito una vez que la salida no 11 veces seguidas. ¿Qué estoy haciendo mal?

0
mKeey 27 ago. 2020 a las 15:45

2 respuestas

La mejor respuesta

Está insertando para cada elemento en el diccionario "dinero" tal como está en un bucle. ¿Necesita recorrer varias cuentas en el mismo archivo json? si no, los bucles no deberían ser necesarios

def getData():
    databaseConn = dbConnect()
    cursor = databaseConn.cursor()

    delete = "TRUNCATE TABLE bank"
    try:
        cursor.execute(delete)
        databaseConn.commit()
    except:
        print("Delete error")

    money = json.loads(makeRequest("URL",  authToken, True).text)
    
        
    geld = str(money["money"])
    person = money["ownerCharacter"]["name"]

    sql = "INSERT INTO bank (menge,name) VALUES (%s,%s)"
    val = (geld,person)
    try:
        cursor.execute(sql, val)
        databaseConn.commit()
    except:
        print("Error Database")
    dbClose(databaseConn, cursor)
1
en_lorithai 27 ago. 2020 a las 13:15

Aquí es donde está el problema

for amount in money:

Está iterando sobre las claves del diccionario. Y parece que tienes 11 claves en ese diccionario. Esto significa que está realizando esta acción.

geld = str(money["money"])

11 veces. Es por eso que lo inserta 11 veces en su base de datos.

No hagas el bucle for. Solo insértelo accediendo una vez

geld = str(money["money"])
1
kotolgifmemana 27 ago. 2020 a las 12:53