代码之家  ›  专栏  ›  技术社区  ›  Amine Kanem

我试图在我的表db中插入值,其中有一个循环用于[重复]

  •  0
  • Amine Kanem  · 技术社区  · 2 年前
    import sqlite3
    
    connexion = sqlite3.connect("album2.db")
    curseur = connexion.cursor()
    
    #------ Tables
    
    curseur.execute("""CREATE TABLE artiste (
        artiste_id INTEGER NOT NULL PRIMARY KEY, 
        nom VARCHAR);""")
    curseur.execute("""CREATE TABLE album (
        album_id INTEGER NOT NULL PRIMARY KEY, 
        artiste_id INTEGER REFERENCES artiste,
        titre VARCHAR,
        annee_sortie INTEGER);""")
    
    #----- Add to db
    
    artiste = ("Micheal Jackson", "Celine Dion", "Luke Combs")
    for i in artiste:
        curseur.execute(f"""INSERT INTO artiste (nom) VALUES ({i});""")
    
    connexion.commit()
    connexion.close()
    

    错误:

    第18行,in 游标。执行(“插入艺人(nom)值(“+i+”);”) sqlite3.OperationalError:接近“Jackson”:语法错误

    1 回复  |  直到 2 年前
        1
  •  1
  •   azro    2 年前

    在手动构建查询时,传递的字符串如下所示

    INSERT INTO artiste (nom) VALUES (Jackson)
    

    INSERT INTO artiste (nom) VALUES ("Jackson")
    
    for i in artiste:
        curseur.execute(f"""INSERT INTO artiste (nom) VALUES ("{i}");""")
    

    ?

    for i in artiste:
        curseur.execute("INSERT INTO artiste (nom) VALUES (?);", (i,))
    

    它为yo做了引用,因此避免了SQL注入