sqlalchemy.exc.ArgumentError : l'argument de liste doit contenir uniquement des tuples ou des dictionnaires
P粉080643975
P粉080643975 2023-11-07 21:06:02
0
1
1008

J'ai essayé d'utiliser sqlalchemy pour transférer des données dans une base de données MySQL. Quand j'essaie de faire cela, cela donne une erreur sqlalchemy.exc.ArgumentError:列表参数必须仅包含元组或字典 . Le code suivant est utilisé pour l'insertion.

def insert_data(db, table, rows):

    db.execute(f"INSERT INTO {table} VALUES (%s)", rows)
    db.commit()
Le contenu de

rows est le suivant.

[(1, 'asdsewadada', 'lajsdljasld', 'lol@gmail.com', 51)]

Donc, j'insère une liste de tuples mais j'obtiens toujours la même erreur.

P粉080643975
P粉080643975

répondre à tous(1)
P粉990568283

À partir de SQLAlchemy version 2, vous devez utiliser des dictionnaires au lieu de tuples :

Donc, cela devrait corriger votre code :

def insert_data(db: sqlalchemy.engine.base.Engine, query: str, parameters: dict):
    log_headline: str = "insert_data() ::"
    """
    :param db:
    :param query: INSERT INTO votes (time_cast, candidate) VALUES (:time_cast, :candidate)
    :param parameters: {"time_cast": time_cast, "candidate": team}
    :return:
    """

    # Insert
    stmt = sqlalchemy.text(query)
    try:
        # Using a with statement ensures that the connection is always released
        # back into the pool at the end of statement (even if an error occurs)
        with db.connect() as conn:
            conn.execute(stmt, parameters=parameters)
            conn.commit()
        print(f"{log_headline} OK inserted data ")
    except Exception as e:
        # If something goes wrong, handle the error in this section. This might
        # involve retrying or adjusting parameters depending on the situation.
        print(f"{log_headline} Error {e}")
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal