【问题标题】:Python cx_Oracle loading CSV using executemany() gives "Required argument 'parameters' (pos 2) not found"使用 executemany() 加载 CSV 的 Python cx_Oracle 给出“未找到必需的参数‘参数’(位置 2)”
【发布时间】:2019-10-17 00:57:34
【问题描述】:

我的目的是使用 Python 将 csv 文件加载到 Oracle 表中。

  1. 我正在截断表格,如果数据已经存在 - 这是有效的

  2. 我正在检查计数以进行测试 - 这是有效的

  3. 我正在尝试将文件中的数据插入 Oracle。我遇到了问题:

    '未找到必需的参数'参数'(位置 2)'

代码:

import cx_Oracle
import pandas as pd 

column_names = 
['Col1','Col2','Col3','Col4','Col5','Col6','Col7','Col8','Col9']
df = pd.read_csv(r"C:\Users\file.dat", names=column_names, sep='|')

dsn_tns = cx_Oracle.makedsn('*', '*', sid='*') 
conn = cx_Oracle.connect(user='*', password='*', dsn=*) 
c = conn.cursor()
c.execute('Truncate table Table_Name')
c.execute('select count(1) from Table_Name')
for row in c:
print(row)        
for lines in df:
c = conn.cursor()
print("I want to print lines")
res = c.executemany("""Insert into Code_Extract (OPERATION,
                 LIST_COUNTRY_ID,LIST_CODE,SOURCE_SYSTEM_CODE,CODE_USUAL,
                   INT_LIST_CODE,INT_MDM_CODE,CODE_STATUS,MDM_CODE) 
                   Values(df['col1'],df['Col2'],df['Col3'],df['Col4'],df['Col5'],df['Col6'],df['Col7'],df['Col8'],df['Col9'])""")
conn.commit()
c.execute('select count(1) from Table_Name')
for row in c:
    print(row)
c.close()
conn.commit()
conn.close()

我的期望是每当我收到文件时,它应该从指定路径自动加载到 Oracle。

【问题讨论】:

  • 缩进已关闭。我不知道 for 循环和 execuremany 应该如何在那里交互(也许我不熟悉 pandas 的东西,但为什么两者都有?)。如果您可以为 csv 文件的一行发布实际查询和 db-error(您也应该提供),我会更高兴。
  • 如果你的数据是在磁盘上的 CSV 文件中,在 Oracle 数据库中加载它的最快方法可能是 SQL*Loader,它在 Oracle Instant Client 中是免费的blogs.oracle.com/opal/…

标签: python database oracle pandas cx-oracle


【解决方案1】:

executemany() 的参数确实是必需的。请参阅documentation 了解更多信息。

您已将参数放入 SQL 中,但应将它们指定为绑定变量,如 values (:1, :2, :3, :4, :5, :6, :7, :8, :9) 中所示。然后,您可以将数据作为序列列表传递给 executemany()。希望这很清楚!你可以看一个例子here

【讨论】:

猜你喜欢
  • 2017-08-09
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2021-07-22
  • 2013-05-17
  • 2017-05-26
相关资源
最近更新 更多