我正在访问oracle数据库并尝试使用python更新它。以下是我的代码:
import cx_Oracle
import pandas as pd
import datetime
import numpy
import math
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
def update_output_table(customer_id_list,column_name,column_vlaue_list) :
num_rows_to_add = len(customer_id_list)
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
for i in range(0,num_rows_to_add,1) :
c.execute("""UPDATE output SET """+column_name+""" = %s WHERE customer_id = %s""" %(column_vlaue_list[i],customer_id_list[i]))
total_transaction_df = pd.read_sql("""select distinct b.customer_id,count(a.transaction_id) as total_transaction from transaction_fact a,customer_dim b where a.customer_id = b.CUSTOMER_ID group by b.CUSTOMER_ID""",conn)
# Update this details to the output table
update_output_table(list(total_transaction_df['CUSTOMER_ID']),'TOTAL_TRANSACTION',list(total_transaction_df['TOTAL_TRANSACTION']))
conn.close()
我的程序完全执行但我没有看到我的数据库表更新。有人可以建议我哪里出错吗?
注意:我是新手。请问愚蠢的怀疑。提前谢谢。
答案 0 :(得分:0)
conn.commit()
之前您遗漏了conn.close()
:
Here你会发现一些明确需要的信息。如果没有提交,您的代码就会进行更新,那么当关闭连接时,所有非提交的更改都会回滚,因此您不会看到DB中的更改。
您也可以设置cx_Oracle.Connection.autocommit = 1
,但不建议这样做,因为您无法控制transactions。