python向Oracle写大量数据

import bs4
import requests
import pandas as pd
import cx_Oracle as cx
from datetime import datetime

time=datetime.now().strftime('%Y-%m-%d')#获取当前系统时间 并规定格式
n_url='所需要爬取的网址'#  网址
header_dic={
     
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'}
respon=requests.get(n_url)#用get解析网址
#print(respon)
#print(respon.text)
soup=bs4.BeautifulSoup(respon.text,'html.parser')#用bs4来解析得到的文本
#print(soup)
div_hq=soup.select('tbody tr')#运用select选择器来找到所要爬取的数据的标签
list1=[]#创建一个列表并把遍历的数据去空格写到列表里
for temp in div_hq:
    temp = temp.text.split()#去空格
    list1.append(temp)
    #print(list1)
    temp=pd.DataFrame(list1)#用DF的方法整合表格
    temp=temp.fillna('0')#pandas里把所有空值用0替换
#print(temp)
temp.columns=['a','b','c','d']
temp=temp.reindex(columns=['time','a','b','c','d'],fill_value=time)#reindex重新设置列 在最前面插入一列
#print(temp)
conn = cx.connect('ytsj2019/[email protected]:1521/kfzxsjtb')  #创建连接
db = conn.cursor()# 获得游标 游标作用,其实和循环差不多,就是你把数据放在游标里面,然后使用游标一行一行的取得数据。最终达到循环处理数据的目的

val=[tuple(i) for i in temp.values]#DF表格的值 遍历并转换成元组 val是这个格式的[(),()]
for j in range(len(temp)):#原数据的长度
    #数据太长 做个字符串拼接
    sqlstr="insert into 表名(列名1,列名2,列名3,列名4)"
    #下面一行要写成Oracle可以执行的语句下面都是Oracle的转换类型的函数
    sqlstr+="values (to_date('"+val[j][0]+"','yyyy-mm-dd')"+",'"+str(val[j][1])+"',to_number("+str(val[j][2])+"),to_number("+str(val[j][3])+"))"
    print(sqlstr)
    db.execute(sqlstr)#逐行写入
conn.commit()#提交
conn.close()#关闭连接

你可能感兴趣的:(python,Oracle,数据库,oracle,python)