function takes exactly 2 argument 3 (given) python cx_orcale 插入错误

function takes exactly 2 argument 3 (given) python cx_orcale Insert Error

我正在使用 Oracle 数据库,我正在尝试将数据框插入现有的 table 但出现额外参数错误。我连接到数据库成功了。

我的数据框

    TMIDS MEM_ID 
1    8    UY2554
2    8    UY2573
3    8    UY2576

我的代码:

注意:连接编码部分因为它正在工作而被跳过,这里不需要

cursor = connection.cursor()
print("connection successful")
for index, row in df.iterrows():
    cursor.execute("INSERT INTO UCIDBA.dummy_table (TMIDS,MEM_ID) values(?,?)",row.TMIDS, row.MEM_ID)
connection.commit()
cursor.close()
print("inserted in table")

我低于错误

cursor.execute("INSERT INTO UCIDBA.dummy_table (TMIDS,MEM_ID) values(?,?)",row.TMIDS, row.MEM_ID)

TypeError: function takes at most 2 arguments (3 given)

您需要将值作为元组传递。 因此,将您的代码更改为:

cursor.execute("INSERT INTO UCIDBA.dummy_table (TMIDS,MEM_ID) values(?,?)",(row.TMIDS, row.MEM_ID))

是否执行游标的方法class? 如果是这样,在它的定义中,第一个参数是 self?

Python 将隐式发送它,但函数必须显式接受它。

听起来你正在将自己、row.TMIDS、row.MEM_ID 发送到只需要 row.TMIDS、row.MEM_ID[=10= 的函数]

Oracle 不使用 ? 字符来定义参数。它们必须编号 (:1) 或命名 (:name)。所以你的代码应该是这样的:

cursor = connection.cursor()
for index, row in df.iterrows():
    cursor.execute("""
            INSERT INTO UCIDBA.dummy_table (TMIDS,MEM_ID)
            values(:1, :2)""",
            [row.TMIDS, row.MEM_ID])
connection.commit()
cursor.close()
print("inserted in table")