Oracle插入失败

2024-10-06 07:52:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这段代码来使用cx_oracle将数据插入到表中,但出现了一些错误

我的数据如下所示:

[['BOB', 20190619, 118.16, 118.38, 116.05, 117.8, 'No', 117.8, 117.8, 117.8, 0.0, 0.0, 0.0, nan, nan, nan, nan]

我对代码的尝试如下:

sql='INSERT INTO stockstats VALUES(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16)'

n = 0
for i in df.iterrows():
  cursor_1.execute(sql,df_list[n])
  n += 1

cursor_1.execute(sql,df_list[n])
cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number

我也试过这个,也遇到了同样的问题:

sql = 'INSERT INTO stockstats VALUES(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16)'
cursor_1.executemany(sql, df.values.tolist())

cursor_1.executemany(sql, df.values.tolist())
cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number

我想知道我做错了什么

任何hep都很好


Tags: 数据代码dfexecutesqlnancursorlist
2条回答

您可以研究以下几种可能性:

  • 确保所有行的列数相同(通过在调用execute()之前打印长度)
  • 通过调用cursor.prepare(sql)后跟cursor.bindnames(),检查cx_Oracle认为存在的绑定名称列表

这两种检查都应该有助于发现问题的根源,无论是输入数据输入错误还是“错误”

不清楚数据帧df中的内容是列还是行。即使将它们视为列,逗号分隔元素的数目(<强> 17 < /强>)不符合^ {< CD3}}字符串的{{CD2}}列表中绑定变量(<强> 16 < /强>)的数量。

将这些逗号分隔的元素视为列,从数据帧中定期插入,根据表的列数固定列数,更喜欢使用df。通过使用sqlalchemy连接到sql。在插入过程中创建引擎,例如

import pandas as pd
import sqlalchemy as db

engine = db.create_engine('oracle+cx_oracle://un:pwd@dbhost:port/dbname')
conn = engine.connect()

try:
    df.to_sql('stockstats', con=engine, if_exists='append', index=False )
    engine.execute("SELECT * FROM stockstats").fetchall()

针对由NaN值引起的问题

相关问题 更多 >