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

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

简介

本文将讲解使用Python读写以及备份Oracle数据库的操作示例,使用Python的cx_Oracle库实现。

在操作Oracle数据库时,我们可以使用cx_Oracle库,其可以让我们在Python中进行对Oracle数据库的操作,如连接、创建表、添加数据等等。此外,我们还会使用Python内置的os模块进行数据库的备份操作。

准备工作

在开始使用cx_Oracle库之前,需要先安装好Oracle Instant Client和cx_Oracle库。安装步骤可以参考cx_Oracle Installation,并根据自己的需要选择相应的版本。

在安装完成后,可以使用pip安装cx_Oracle库,输入以下命令即可:

pip install cx_Oracle

连接Oracle数据库

在进行任何对Oracle数据库的操作之前,我们需要先建立一个连接。在进行连接时,需要提供Oracle数据库的地址、端口、用户名及密码等信息。

import cx_Oracle

dsn_tns = cx_Oracle.makedsn(
    'address',  # Oracle数据库地址
    '1521',  # Oracle数据库端口
    service_name='service_name'  # Oracle数据库服务名
)
conn = cx_Oracle.connect(
    user='username',  # Oracle数据库用户名
    password='password',  # Oracle数据库密码
    dsn=dsn_tns
)

print(conn.version)

以上代码建立了一个对Oracle数据库的连接,并输出了Oracle数据库的版本号。

创建表

在建立连接之后,我们可以创建一张表来存储数据。在创建表时,需要提供表名以及表的列名和数据类型等信息。

import cx_Oracle

dsn_tns = cx_Oracle.makedsn(
    'address',  # Oracle数据库地址
    '1521',  # Oracle数据库端口
    service_name='service_name'  # Oracle数据库服务名
)
conn = cx_Oracle.connect(
    user='username',  # Oracle数据库用户名
    password='password',  # Oracle数据库密码
    dsn=dsn_tns
)

cursor = conn.cursor()

cursor.execute("""
CREATE TABLE example (
    id NUMBER,
    name VARCHAR2(50),
    age NUMBER(3)
)
""")

cursor.close()
conn.close()

以上代码创建了一张名为example的表,其中包含3个列:id、name和age。

添加数据

在创建了表之后,我们可以向表中添加数据。在添加数据时,需要提供的是数据的值。

import cx_Oracle

dsn_tns = cx_Oracle.makedsn(
    'address',  # Oracle数据库地址
    '1521',  # Oracle数据库端口
    service_name='service_name'  # Oracle数据库服务名
)
conn = cx_Oracle.connect(
    user='username',  # Oracle数据库用户名
    password='password',  # Oracle数据库密码
    dsn=dsn_tns
)

cursor = conn.cursor()

cursor.execute("""
INSERT INTO example (id, name, age)
VALUES (1, 'Alice', 20)
""")
conn.commit()

cursor.close()
conn.close()

以上代码向刚刚创建的example表中插入了一条数据。

数据库备份

在操作数据库时,我们通常需要进行备份操作,以防止数据丢失或其他问题。在Python中,可以使用os模块提供的方法来实现数据库备份。

import cx_Oracle
import os
import datetime

dsn_tns = cx_Oracle.makedsn(
    'address',  # Oracle数据库地址
    '1521',  # Oracle数据库端口
    service_name='service_name'  # Oracle数据库服务名
)
conn = cx_Oracle.connect(
    user='username',  # Oracle数据库用户名
    password='password',  # Oracle数据库密码
    dsn=dsn_tns
)

backup_dir = 'backup'
if not os.path.exists(backup_dir):
    os.makedirs(backup_dir)

backup_file = os.path.join(backup_dir, '{}.bak'.format(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')))
os.system('expdp {}/{}@{} directory=DATA_PUMP_DIR dumpfile={} logfile={}.log'.format(
    'username', 'password', dsn_tns, backup_file, backup_file))

conn.close()

以上代码使用Oracle提供的expdp命令将数据库备份到指定目录下,备份文件的命名规则为当前时间。

另外,需要先在Oracle中创建一个名为DATA_PUMP_DIR的目录,方便进行备份操作。创建目录的命令如下:

CREATE DIRECTORY DATA_PUMP_DIR AS '/path/to/directory';  # 数据库保存备份的目录
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO username;  # 给username用户授权

示例说明

示例1:插入多条数据

import cx_Oracle

dsn_tns = cx_Oracle.makedsn(
    'address',  # Oracle数据库地址
    '1521',  # Oracle数据库端口
    service_name='service_name'  # Oracle数据库服务名
)
conn = cx_Oracle.connect(
    user='username',  # Oracle数据库用户名
    password='password',  # Oracle数据库密码
    dsn=dsn_tns
)

cursor = conn.cursor()

data = [
    (1, 'Alice', 20),
    (2, 'Bob', 25),
    (3, 'Cindy', 30)
]

cursor.executemany("""
INSERT INTO example (id, name, age)
VALUES (:1, :2, :3)
""", data)

conn.commit()

cursor.close()
conn.close()

以上代码使用executemany()方法一次性插入多条数据。

示例2:备份Oracle数据库

import cx_Oracle
import os
import datetime

dsn_tns = cx_Oracle.makedsn(
    'address',  # Oracle数据库地址
    '1521',  # Oracle数据库端口
    service_name='service_name'  # Oracle数据库服务名
)
conn = cx_Oracle.connect(
    user='username',  # Oracle数据库用户名
    password='password',  # Oracle数据库密码
    dsn=dsn_tns
)

backup_dir = 'backup'
if not os.path.exists(backup_dir):
    os.makedirs(backup_dir)

backup_file = os.path.join(backup_dir, '{}.bak'.format(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')))
os.system('expdp {}/{}@{} directory=DATA_PUMP_DIR dumpfile={} logfile={}.log'.format(
    'username', 'password', dsn_tns, backup_file, backup_file))

conn.close()

以上代码使用Oracle提供的expdp命令将数据库备份到指定目录下,备份文件的命名规则为当前时间。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python读写及备份oracle数据库操作示例 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Pandas GroupBy Unstack

    Pandas是一个基于NumPy的Python数据处理库,可以对数据进行多种形式的操作和处理。其中Groupby和Unstack是Pandas中用于数据处理的非常重要的函数。 GroupBy 背景 在实际数据处理中,经常需要将数据按照某种条件进行分组,例如将销售数据按照不同的城市进行分组分析,统计各城市的销售情况和市场占比等。Groupby函数可以很方便的完…

    python-answer 2023年3月27日
    00
  • Python pandas常用函数详解

    Python pandas 常用函数详解 Python pandas 是一个用于数据分析的强大工具,提供了丰富的函数和方法用以处理数据。本文将详细讲解 pandas 中常用的函数,包括数据导入、索引与选择、数据处理、数据排序和数据统计等。 数据导入 pandas 提供了方便的数据导入功能,支持导入多种格式的数据,如 csv、Excel 或 SQL 数据库等。…

    python 2023年5月14日
    00
  • Pandas按周/月/年统计数据介绍

    《Pandas按周/月/年统计数据介绍》是一个非常有用的数据分析技巧,它可以帮助我们更快速、更简单地进行时间序列数据的聚合和分析。下面,我将分享一下使用Pandas进行按周、月、年统计数据的完整攻略。 1. 将数据按时间进行转换 首先,我们需要将数据按照时间进行转换,以便能够利用Pandas的时间序列函数进行处理。通常,我们需要保证数据集中有一个列是表示时间…

    python 2023年5月14日
    00
  • Python 读取千万级数据自动写入 MySQL 数据库

    Python 读取千万级数据自动写入 MySQL 数据库 本文将讲解如何使用 Python 读取千万级数据,并将读取的数据自动写入 MySQL 数据库的过程。 确认准备工作 在开始执行代码之前,需要先完成以下准备工作: 安装 MySQL 和 Python 的 MySQL 连接库 pymysql,可以直接使用 pip 安装: pip install pymys…

    python 2023年6月13日
    00
  • 关于pandas的离散化,面元划分详解

    下面是关于pandas的离散化、面元划分的详解。 什么是离散化和面元划分? 离散化是数据预处理的一种方式,将连续的数值型数据分成有限个数字区间,称为“面元”(bin),将一些连续数据转为离散数据。比如对于身高这个特征,我们可以根据数据的分布情况,将身高按照一定的间隔区间进行划分,比如160-165,165-170等等,这样就将连续的身高范围划分成了离散的几个…

    python 2023年5月14日
    00
  • Pandas中join和merge的区别是什么

    Pandas中join和merge都是用来将两个或多个数据集按照某些列或索引进行合并的函数。它们的主要区别如下: join是通过索引进行合并,而merge是通过列进行合并。 join只能用于两个数据集的合并,而merge可以合并两个或多个数据集。 join默认情况下是按照左连接进行合并,而merge默认情况下是按照内连接进行合并。 下面通过具体例子来演示jo…

    python-answer 2023年3月27日
    00
  • pandas创建series的三种方法小结

    “pandas创建series的三种方法小结”是一篇讲解如何使用pandas创建series的文章,下面将详细说明其完整攻略。 标题 首先,我们需要为这篇文章添加合适的标题。根据其内容,可以将其命名为“pandas创建series的三种方法小结”。 概述 在使用pandas进行数据分析过程中,常常需要处理Series类型的数据。在pandas中,可以使用三种…

    python 2023年5月14日
    00
  • pandas 颠倒列顺序的两种解决方案

    当我们使用 Pandas 处理数据的时候,常常需要对列进行颠倒。在这种情况下,我们可以使用下面的两种解决方案。 1. 使用 iloc 方法 iloc 方法用于根据索引位置选择行和列。它可以使用以下方式来颠倒列的顺序。 import pandas as pd df = pd.DataFrame({‘a’:[1,2,3], ‘b’:[4,5,6],’c’:[7,…

    python 2023年6月13日
    00
合作推广
合作推广
分享本页
返回顶部