【问题标题】:Insert multiple rows, where all the values of column of insert statement are same except one column插入多行,其中插入语句的列的所有值都相同,除了一列
【发布时间】:2019-07-26 23:30:46
【问题描述】:

我正在向一个表中插入多个条目。除了一列之外,插入语句的所有列的值都是相同的。如程序所示,此特定列从 excel 文件中连续获取值。我不知道如何使用 cx_Oracle 模块将此增量值传递给插入查询。

我尝试使用代码中显示的绑定概念,但没有任何成果,请建议。

import pandas as pd

df=pd.read_excel(r'C:\Users\ABHISHEK.POUDEL\Desktop\mmyyyy.xlsx')

import cx_Oracle
con=cx_Oracle.connect('system/manager1@192.168.8.72:1521/SANUPS')
cur=con.cursor()

print(con.version)


print(df.head(5))

x=df.head(5)
size=x.size
sql="""Insert into tbaadm.hol (CAL_B2K_TYPE,CAL_B2K_ID,MMYYYY,DEL_FLG,HLDY_STR,COMMENT_STR,RECVD_STR,STATUS,LCHG_USER_ID,LCHG_TIME,RCRE_USER_ID,RCRE_TIME,TS_CNT,BANK_ID)
    VALUES ('BRANCH','910',:1,'N',null,null,null,' ','SYSTEM',to_date('25-JUL-19','DD-MON-YY'),'SYSTEM',to_date('25-JUL-19','DD-MON-RR'),0,'01')"""

def insert_func(val):
    val=str(val)
    #cur.execute(sql,(val))
    cur.execute("""Insert into tbaadm.hol (CAL_B2K_TYPE,CAL_B2K_ID,MMYYYY,DEL_FLG,HLDY_STR,COMMENT_STR,RECVD_STR,STATUS,LCHG_USER_ID,LCHG_TIME,RCRE_USER_ID,RCRE_TIME,TS_CNT,BANK_ID)
    VALUES ('BRANCH','910',:1,'N',null,null,null,' ','SYSTEM',to_date('25-JUL-19','DD-MON-YY'),'SYSTEM',to_date('25-JUL-19','DD-MON-RR'),0,'01'), val""")
    return

for f in range(size):
    print(f)
    print(df.iloc[f])
    insert_func(df.iloc[f])


con.commit()
con.close()


11.2.0.2.0
   MMYYYY
0  122099
1  122098
2  122097
3  122096
4  122095
0
MMYYYY    122099
Name: 0, dtype: int64
Traceback (most recent call last):
  File "D:\AVI\PYTHON\KOMODO_FILES\create_date_daily_files.py", line 40, in <module>
    insert_func(df.iloc[f])
  File "D:\AVI\PYTHON\KOMODO_FILES\create_date_daily_files.py", line 34, in insert_func
    VALUES ('BRANCH','910',:1,'N',null,null,null,' ','SYSTEM',to_date('25-JUL-19','DD-MON-YY'),'SYSTEM',to_date('25-JUL-19','DD-MON-RR'),0,'01'), val""")
cx_Oracle.DatabaseError: ORA-00933: SQL command not properly ended

【问题讨论】:

    标签: python oracle cx-oracle


    【解决方案1】:

    需要将参数传递给execute,如:

    cursor.execute(sql, [val])
    

    cursor.execute(sql, (val,))
    

    【讨论】:

    • cx_Oracle.DatabaseError: ORA-12899: value too large for column "TBAADM"."HOLIDAY_MAST_TABLE"."MMYYYY"(实际:38,最大值:6)
    • 产生了上述错误,我认为您建议的解决方案会尝试将 val 变量列表一次全部插入表中。
    • 一点也不!该错误表明数据对您的表无效-您正在尝试将超过 6 个字符(在您的情况下为 38 个字符)的内容绑定到列中!
    猜你喜欢
    • 2014-11-11
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多