使用cx_Oracle将CSV文件内容加载到Oracle中,并出现“Select关键字错误”。

9 浏览
0 Comments

使用cx_Oracle将CSV文件内容加载到Oracle中,并出现“Select关键字错误”。

我正在尝试将一个csv文件加载到Oracle表中,但是遇到了以下错误:\n

DatabaseError: ORA-00928: 缺少SELECT关键字

\n以下是我正在使用的代码:\n

def Create_list():
reader = csv.reader(open("Query_result_combined.csv","r"))
lines=[]
for line in reader:
    lines.append(line)
print(lines[:1])
print(lines[:2])
return lines
def Insert_data():
db_user = "XXXXXXX"  # 用正确的用户名替换此处
db_password = "********"  # 设置环境变量DB_PASSWORD
db_connection_name = "***********"  # 用正确的数据库名称替换此处
#db_driver = "oracle.jdbc.OracleDriver","C:/Oracle/32bitclient/product/11.2.0/client_1/jdbc/lib/ojdbc6.jar"
print("正在连接中!")
con = cx_Oracle.connect(db_user,db_password,db_connection_name)
print("已连接到Oracle!")
lines=Create_list()
#print lines
cur=con.cursor()
print("正在插入数据")
cur.executemany("INSERT INTO BRIODB.A608232_QUERY_RESULT ('InteractionId','QueryId','Score','StartOffsetInMs','EndOffsetInMs','SpeakerRole','QueryIdentity','SpeakerId') VALUES(:1,:2,:3,:4,:5,:6,:7,:8)",lines)
con.commit ()
cur.close()
print("已完成")

\n如果我打印lines[:1]和lines[:2],输出如下:\n

[['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', '']]
正在插入数据

\n我无法解决这个问题。

0
0 Comments

问题:使用cx_Oracle将CSV文件内容加载到Oracle时出现Select关键字错误的原因是什么?如何解决?

原因:如果表的列名为大写,则在插入语句的列列表中删除围绕列名的''。如果插入语句中的列名与表中的列名匹配,则将''替换为"。后者是在引用带有特殊字符的列或列名为混合大小写时使用的方式。

解决方法:根据表的列名情况,修改插入查询的列列表或将''替换为"。同时,还需要确保连接到数据库的用户具有足够的权限,否则会出现ORA-01031: insufficient privileges错误。如果权限不足,则需要联系数据库管理员进行处理。

另外,如果出现ORA-01722: invalid number错误,则可能是由于将字符串转换为数字时出现了错误。需要检查传递的参数是否正确。可以参考提供的链接这里获取更多信息。

在使用cx_Oracle将CSV文件内容加载到Oracle时,需要注意表的列名情况以及用户权限。对于列名为大写的表,需要修改插入查询的列列表或替换''为"。同时,还需要确保传递的参数正确,避免出现ORA-01722: invalid number错误。

0