suchen

Heim  >  Fragen und Antworten  >  Hauptteil

sqlalchemy.exc.ArgumentError: Listenargument darf nur Tupel oder Wörterbücher enthalten

Ich habe versucht, mit sqlalchemy Daten in eine MySQL-Datenbank zu übertragen. Wenn ich das versuche, kommt eine Fehlermeldung sqlalchemy.exc.ArgumentError:列表参数必须仅包含元组或字典 . Zum Einfügen wird der folgende Code verwendet.

def insert_data(db, table, rows):

    db.execute(f"INSERT INTO {table} VALUES (%s)", rows)
    db.commit()
Der Inhalt in

rows ist wie folgt.

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

Ich füge also eine Liste mit Tupeln ein, erhalte aber immer noch die gleiche Fehlermeldung.

P粉080643975P粉080643975430 Tage vor1141

Antworte allen(1)Ich werde antworten

  • P粉990568283

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

    从 SQLAlchemy 版本 2 开始,您应该使用字典而不是元组:

    所以这应该修复你的代码:

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

    Antwort
    0
  • StornierenAntwort