当前位置: 首页 > 知识库问答 >
问题:

使用python从csv文件向oracle插入数据时出错ORA-01722:无效编号

施飞雨
2023-03-14

我正在尝试将数据加载到oracle表。这是我之前的问题,我已经发布了整个代码,我是如何做到的。

这是代码:

def Create_list():
reader = csv.reader(open("Query_result_combined.csv","r"))
lines=[]
print("Creating a list")
for line in reader:
    lines.append(line)
return lines


def Insert_data():
#connection logic goes here 
print("Connecting Now!!")
#conn = cx_Oracle.connect(connstr)
con = cx_Oracle.connect(db_user,db_password,db_connection_name)
print("Connected to Oracle!!")
lines=Create_list()
cur=con.cursor()
print("Inserting data")
for line in lines:
    cur.execute("INSERT INTO A608232_QUERY_RESULT (InteractionId,QueryId,Score,StartOffsetInMs,EndOffsetInMs,SpeakerRole,QueryIdentity,SpeakerId) VALUES(:1,:2,:3,:4,:5,:6,:7,:8)",line)
con.commit ()
cur.close()
print("completed")

所以我纠正了回答我的问题时建议的所有aproches,以便现在错误已经解决,现在我得到了这个新错误ORA-01722:无效号码

当我使用导入选项将数据直接加载到oracle时,数据正在加载。当我尝试在此代码中读取相同的文件并尝试推送数据时,我收到了这个错误。

我打印行[:1]和行[:2]这是我得到的输出:

[['InteractionId', 'QueryId', 'Score', 'StartOffsetInMs', 'EndOffsetInMs', 
'SpeakerRole', 'QueryIdentity', 'SpeakerId']]
[['InteractionId', 'QueryId', 'Score', 'StartOffsetInMs', 'EndOffsetInMs', 
'SpeakerRole', 'QueryIdentity', 'SpeakerId'], ['34118470', '27', '45.63345', 
'89900', '90980', 'U', 'e54fd492-8877-4534-997b-9dbe9a8fbd74', '']]
 Inserting data

有人能指出我在代码中犯的错误吗

共有1个答案

颜志学
2023-03-14

您的 csv 文件中有一个标题行,它不是数字数据的一部分。您必须在将csv.reader映射到文件句柄之后使用next(reader)跳过它。

题外话:使用上下文管理器来确保文件关闭,并且不需要循环,只需将行迭代器转换为列表(跳过第一行时)即可读取所有行(将更快)

def Create_list():
    with open("Query_result_combined.csv","r") as f:
       reader = csv.reader(f)
       next(reader)  # skips title line
       return list(lines)  # directly iterate on the rest of the lines
 类似资料:
  • 我不明白为什么我会犯这个错误。 当我对交互式报表执行此查询时,它会引发 ORA-01722 错误。此查询不仅在 SQL 开发人员中正确运行,而且作为经典报表正确运行。当我将类型更改为交互式报表时,再次抛出相同的错误。 我该怎么办? 提前多谢。

  • 一个非常容易的人,下面的插入是给我

  • ORA-01722:无效号码 ORA-02063:来自db的前一行 如果将查询中的更改为: (不起作用) (不起作用) (不起作用) 我不明白为什么查询在Oracle SQL Developer中运行得很好,但却不能在没有任何错误的情况下运行。如有任何帮助,我们将不胜感激。

  • 我正在我的Oracle客户机中运行下面提到的查询,我得到了 ORA-01722:无效号码 错误。我知道这个问题是由于TAG_VALUE列的类型是“”,我正在将其转换为数字,然后在where子句中使用该字段。我尝试过使用“”功能,但这也没有帮助。如果我运行查询时忽略了最后一个 where 条件,代码为

  • 对于某人来说,这是一个非常简单的方法,下面的插入内容给了我 ORA-01722:无效的数字 为什么?

  • 我在包裹抛出错误中有一个查询 ORA-01722:无效号码。 我试了很多方法,但都没有成功。 null 请给我建议解决办法