【问题标题】:inserting data into a table using pyodbc使用 pyodbc 向表中插入数据
【发布时间】:2019-05-08 15:57:14
【问题描述】:

我尝试使用 python (pyodbc) 将数据插入到我的数据库中,但我不断收到诸如缺少逗号等错误

我尝试使用变量“linea”而不是所有值但不起作用

for linea in nintendo:
        if(linea[0]!='id'):
            print(linea)
            cursor.execute("INSERT INTO Nintendo (juegoid,nombrejuego,generos,desarrolladores,publicadoras,fechapublicacion,exclusividad,ventasglobales,rating) VALUES (linea[0],linea[1],linea[2],linea[3],linea[4],linea[5],linea[6],linea[7],linea[8]);")
            print("data loaded")

这包含“linea”:

['1', '#Breakforcist Battle', 'Party', 'Lucid Sheep Games', 'Lucid Sheep Games', 'April 12, 2018', 'No', '', '']

【问题讨论】:

    标签: python sql oracle


    【解决方案1】:

    您错过了 Values 关键字

    INSERT INTO Nintendo **Values** (juegoid,nombrejuego,generos,desarrolladores,publicadoras,fechapublicacion,exclusividad,ventasglobales,rating) VALUES (linea[0],linea[1],linea[2],linea[3],linea[4],linea[5],linea[6],linea[7],linea[8]);
    

    您还必须使用 cursor.commit 提交数据

    【讨论】:

    • Values 在 OP 的原始 SQL 语句中。
    • 抱歉.. 没有完整看到。
    【解决方案2】:

    通常在 Python 中,您不能直接在字符串中插入变量,如列表值。您必须使用某种类型的字符串格式化方法,包括 % 模运算符(不推荐使用)、str.format(),甚至是 3.6+ 中更新的 F-string

    特别是在 DB-API 中,您应该参数化查询,其中变量绑定到 cursor.execute 调用上的占位符:

    # PREPARED STATEMENT (NO DATA)
    sql = """INSERT INTO Nintendo (juegoid, nombrejuego, generos, desarrolladores, publicadoras,
                                  fechapublicacion, exclusividad, ventasglobales, rating)
             VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"""
    
    # BIND PARAMS
    cursor.execute(sql, params=linea[0:8])
    conn.commit()
    
    print("data loaded")
    

    【讨论】:

    • 我尝试了 str.format 方法string = "INSERT INTO Nintendo (juegoid,nombrejuego,generos,desarrolladores,publicadoras,fechapublicacion,exclusividad,ventasglobales,rating) VALUES ({},{},{},{},{},{},{},{},{});" sql=string.format(linea[0],linea[1],linea[2],linea[3],linea[4],linea[5],linea[6],linea[7],linea[8]) cursor.execute(sql) 现在我得到了 ORA-00911 错误
    • 你为什么不参数化?避免在 SQL 中进行字符串插值。您当前的尝试不包括可以通过参数避免的字符串列的引号。请告知为什么我的解决方案不起作用。发布完整错误。
    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多