使用pyodbc

时间:2019-05-08 15:57:14

标签: python sql oracle

im试图使用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','','']

2 个答案:

答案 0 :(得分:0)

您错过了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提交数据

答案 1 :(得分:0)

通常在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")