import cx_Oracle as cx
import csv
#flag是你的日期列在哪一列,默认第一列
def save_data(reader,info,table_data,flag =1): #目标:1、如果数据库中没有数据,那么所有数据都插入
# 2、如果数据库里数据日期大于当前需要插入的数据日期,那么不插入
for i, rows in enumerate(reader):
rowsdata = ‘‘
if i > 0:
for j in range(len(rows)):
rowsdata += ‘\‘‘ + rows[j] + ‘\‘,‘ #构造values(‘‘,‘‘,‘‘,)
rowsdata = rowsdata[:-1] #去掉末尾的 ,
if info[0][0] is None or info[0][0] < int(rows[flag - 1]): #参照【目标】,info[0][0]就是数据库里最大的,参考file_addr函数的sql
cursor.execute("insert into " + table_data + " values( " + rowsdata + ")") #执行导入
conn.commit()
def file_addr(): # 有其他表直接再新增函数就可以
f = open(‘E:/shuju/3.csv‘)
reader = csv.reader(f)
sql = ‘select max(oc_date) from reportdata.dw_data_hy‘
cursor.execute(sql)
info = cursor.fetchall()
save_data(reader,info,table_data,flag=2) #如果不是第一列,在这里加flag
f.close()
if __name__ == ‘__main__‘:
table_data = ‘dw_data_hy‘ #表名
username = ‘reportdata‘ #数据库名
passwd = ‘reportdata‘ #数据库密码
host = ‘localhost‘ # ip
port = ‘1521‘ # 端口
sid = ‘orcl‘ #数据库实例名
tns = cx.makedsn(host,port,sid) #tns固定搭配
conn = cx.connect(username,passwd,tns) #数据库连接
cursor = conn.cursor() #启用游标指针
file_addr()
print(‘XXX数据导入成功!‘)