Python读写及备份oracle数据库操作示例


Posted in Python onMay 17, 2018

本文实例讲述了Python读写及备份oracle数据库操作。分享给大家供大家参考,具体如下:

最近项目中需要用到Python调用oracle实现读写操作,踩过很多坑,历尽艰辛终于实现了。性能怎样先不说,有方法后面再调优嘛。现在把代码和注意点记录一下。

1. 所需Python工具库

cx_Oraclepandas,可以使用通过控制台使用pip进行安装(电脑中已经安装)

Python读写及备份oracle数据库操作示例

2. 实现查询操作

#工具库导入
import pandas as pd
import cx_Oracle
# 注:设置环境编码方式,可解决读取数据库乱码问题
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
#实现查询并返回dataframe
def query(table)
  host = "127.0.0.1"  #数据库ip
  port = "1521"   #端口
  sid = "test"  #数据库名称
  dsn = cx_Oracle.makedsn(host, port, sid)
  #scott是数据用户名,tiger是登录密码(默认用户名和密码)
  conn = cx_Oracle.connect("scott", "tiger", dsn)
  #SQL语句,可以定制,实现灵活查询
  sql = 'select * from '+ table
  # 使用pandas 的read_sql函数,可以直接将数据存放在dataframe中
  results = pd.read_sql(sql,conn)
  conn.close
  return results
test_data = query(test_table) # 可以得到结果集

3. 实现插入操作

#工具库导入
import pandas as pd
import cx_Oracle
#实现插入功能
def input_to_db(data,table):
  host = "127.0.0.1"  #数据库ip
  port = "1521"   #端口
  sid = "test"  #数据库名称
  dsn = cx_Oracle.makedsn(host, port, sid)
  #scott是数据用户名,tiger是登录密码(默认用户名和密码)
  conn = cx_Oracle.connect("scott", "tiger", dsn)
  #建立游标
  cursor = connection.cursor()
  #sql语句,注意%s要加引号,否则会报ora-01036错误
  query = "INSERT INTO"+table+"(name,gender,age) VALUES ('%s', '%s', '%s')"
  #逐行插入数据
  for i in range(len(data)):
    name= data.ix[i,0]
    gender= data.ix[i,1]
    age= data.ix[i,2]
   # 执行sql语句
    cursor.execute(query % (name,gender,age))
  connection.commit()
  # 关闭游标
  cursor.close()
  connection.close()
#测试插入数据库
#测试数据集
test_data = pd.DataFrame([['小明','男',18],['小芳','女',18]],index = [1,2],columns=['name','gender','age'])
#调用函数实现插入
input_to_db(test_data,test_table1)

4. Python备份Oracle数据库

#!/usr/bin/python
#coding=utf-8
import threading
import os
import time
#用户名
user = 'username'
#密码
passwd = 'password'
#备份保存路径
savepath = '/home/oracle/orcl_bak/'
#要备份的表
tables = ' tables=department,employee'
#备份周期
circle = 2.0
#备份命令
global bak_command
bak_command = 'exp '+user+'/'+passwd + ' file=' + savepath
def orclBak():
  now = time.strftime('%Y-%m-%d %H:%M:%S')
  command = bak_command + now + '.dmp' + tables
  print command
  if os.system(command) == 0:
    print '备份成功'
  else:
    print '备份失败'
  global t
  t = threading.Timer(circle, orclBak)
  t.start()
t = threading.Timer(circle, orclBak)
t.start()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中模拟enum枚举类型的5种方法分享
Nov 22 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
python使用threading.Condition交替打印两个字符
May 07 Python
python反编译学习之字节码详解
May 19 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
python 装饰器的使用示例
Oct 10 Python
使用python将微信image下.dat文件解密为.png的方法
Nov 30 Python
python实现Thrift服务端的方法
Apr 20 Python
Python selenium抓取微博内容的示例代码
May 17 #Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 #Python
Python实现读取txt文件并转换为excel的方法示例
May 17 #Python
cmd运行python文件时对结果进行保存的方法
May 16 #Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 #Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 #Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 #Python
You might like
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
详解js删除数组中的指定元素
2018/10/31 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
Python API len函数操作过程解析
2020/03/05 Python
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
优秀管理者事迹材料
2014/05/22 职场文书
敬老院标语
2014/06/27 职场文书
2014年英语工作总结
2014/12/20 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
爱国影片观后感
2015/06/18 职场文书
php引用传递
2021/04/01 PHP
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技