recherche

Maison  >  Questions et réponses  >  le corps du texte

sqlalchemy.exc.ArgumentError : l'argument de liste doit contenir uniquement des tuples ou des dictionnaires

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粉080643975P粉080643975384 Il y a quelques jours1031

répondre à tous(1)je répondrai

  • P粉990568283

    P粉9905682832023-11-08 11:46:10

    À 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}")

    répondre
    0
  • Annulerrépondre