csv导入到数据库(目标参考注释)

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数据导入成功!')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章