在过go 的几个小时里,我一直在头痛,但找不到根本原因.浏览了多篇文章,但运气不佳.
我正在try 合并存储在Pandas 数据框中的值.
merchantinfo_lst = appenddata.values.tolist()
通过下面的代码,我试图将数据合并到目标表中.
sql ='merge into bi.merchant_info_test ';
sql+=' using dual';
sql+=' on ( ATRANS_ID = :2 )';
sql+=' when matched then update set MERCHANT_INFO = :15, MESSAGE_PARAM = :16, PUBLISH_DATE = :13' ;
sql+=' when not matched then insert( ADDRESS,ATRANS_ID,CITY_NAME,COUNTRY_CODE,LATITUDE,LONGITUDE,MERCHANT_CATEGORY_CODE,MERCHANT_DESCRIPTOR,MERCHANT_ID,';
sql+=' MERCHANT_NAME,PHONE_NUMBER,POSTAL_CODE,PUBLISH_DATE,STATE_PROVINCE_CODE,MERCHANT_INFO,MESSAGE_PARAM )';
sql+=' values( :1, :2, :3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16 )';
for i in range(len(merchantinfo_lst)):
cur.execute(sql,merchantinfo_lst[i])
我正在获取cx\U Oracle.DatabaseError:ORA-01008:并非所有变量都已绑定,但列表中存在所有值,目标表中存在所有列.
Python版本:2.7.5
表 struct
Name Null? Type
---------------------- -------- --------------
ATRANS_ID NOT NULL RAW(36 BYTE)
MERCHANT_ID VARCHAR2(20)
MERCHANT_DESCRIPTOR VARCHAR2(100)
MERCHANT_NAME VARCHAR2(100)
ADDRESS VARCHAR2(250)
CITY_NAME VARCHAR2(100)
STATE_PROVINCE_CODE VARCHAR2(4)
POSTAL_CODE VARCHAR2(10)
COUNTRY_CODE VARCHAR2(10)
LATITUDE VARCHAR2(20)
LONGITUDE VARCHAR2(20)
PHONE_NUMBER VARCHAR2(15)
MERCHANT_CATEGORY_CODE VARCHAR2(6)
MERCHANT_INFO VARCHAR2(250)
MESSAGE_PARAM VARCHAR2(2000)
PUBLISH_DATE DATE
Python代码
def table_merge(data_frame,uname,passwd,oracle_dsn):
merchantinfo = pd.DataFrame()
transidinfo = pd.DataFrame()
ora_con = oracle_conn(uname,passwd,oracle_dsn)
cur = ora_con.cursor()
now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
appenddata['MERCHANT_INFO'] = appenddata['MERCHANT_NAME']+ ' ' +appenddata['CITY_NAME']+ ' '+appenddata['STATE_PROVINCE_CODE']+ ' ' +appenddata['COUNTRY_CODE']+ ' ' +appenddata['POSTAL_CODE']
appenddata['MESSAGE_PARAM'] = appenddata['MERCHANT_ID']+ '|' + appenddata['MERCHANT_INFO']
appenddata['PUBLISH_DATE'] = dt_string
merchantinfo_lst = appenddata.values.tolist()
print('printing list')
print(merchantinfo_lst)
sql ='merge into bi.merchant_info_test ';
sql+=' using dual';
sql+=' on ( ATRANS_ID = :2 )';
sql+=' when matched then update set MERCHANT_INFO = :15, MESSAGE_PARAM = :16, PUBLISH_DATE = :13' ;
sql+=' when not matched then insert( ADDRESS,ATRANS_ID,CITY_NAME,COUNTRY_CODE,LATITUDE,LONGITUDE,MERCHANT_CATEGORY_CODE,MERCHANT_DESCRIPTOR,MERCHANT_ID,';
sql+=' MERCHANT_NAME,PHONE_NUMBER,POSTAL_CODE,PUBLISH_DATE,STATE_PROVINCE_CODE,MERCHANT_INFO,MESSAGE_PARAM )';
sql+=' values( :1, :2, :3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16 )';
for i in range(len(merchantinfo_lst)):
cur.execute(sql,merchantinfo_lst[i])
cur.close()
ora_con.commit()
ora_con.close()
输出
/home/kkant/microservice-poc % python consumer.py
printing list
[[u'dummy_address', u'123456789', u'dummy_city', u'91', u'', u'', u'2345', u'dummy', u'123', u'dummy_merchant', u'1234567890', u'123456', '27/05/2022 11:32:22', u'', u'dummy_merchant dummy_city 91 123456', u'123|dummy_merchant dummy_city 91 123456'], [u'dummy_address', u'1234567455', u'dummy_city', u'91', u'', u'', u'2345', u'dummy', u'456', u'dummy_merchant', u'1234567890', u'123456', '27/05/2022 11:32:22', u'', u'dummy_merchant dummy_city 91 123456', u'456|dummy_merchant dummy_city 91 123456']]
Traceback (most recent call last):
File "consumer.py", line 102, in <module>
table_merge(appenddata)
File "consumer.py", line 71, in table_merge
cur.execute(sql,merchantinfo_lst[i])
cx_Oracle.DatabaseError: ORA-01008: not all variables bound
[enter image description here][1]