利用python对数据库Oracle进行增删查改,并且调用执行存储过程。

利用python对数据库Oracle进行增删查改,并且调用执行存储过程。

import cx_Oracle
class Oracle(object):
def init(self, user_name, password, host, instance):
self._conn = cx_Oracle.connect(‘%s/%s@%s/%s’ % (user_name, password, host, instance))
self.cursor = self._conn.cursor()
print(‘[提示]: 连接成功’)

def query_all(self, sql):
    self.cursor.execute(sql)
    return self.cursor.fetchall()

def query_one(self, sql):
    self.cursor.execute(sql)
    return self.cursor.fetchone()

def query_by(self, sql, params={}):
    self.cursor.execute(sql, params)
    return self.cursor.fetchall()

def insert(self, sql, params={}):
    self.cursor.execute(sql, params)
    self._conn.commit()

def update(self, sql, params={}):
    self.cursor.execute(sql, params)
    self._conn.commit()

def delete(self, sql, params={}):
    self.cursor.execute(sql, params)
    self._conn.commit()
def procedure(self, sql, params={}):
    self.cursor.execute(sql, params)
    self._conn.commit()

if name == ‘main’:
test = Oracle(‘scott’, ‘abc123’, ‘127.0.0.1:1521’, ‘orcl’)
# 测试:查询所有记录
sql1 = ‘select * from scott.dept’
result = test.query_all(sql1)
print(result)
print(‘所有记录已经显示。’)

# 测试:查询单条记录
result = test.query_one(sql1)
print(result)

# 测试:根据查询条件查询记录
sql1 = 'select * from scott.dept where deptno = :deptno and dname = :dname'
result = test.query_by(sql1, {'deptno': 10, 'dname': 'ACCOUNTING'})
print(result)
print('查询指定的记录行。')


#sql1 = "insert into scott.dept(deptno, dname, loc) values(:deptno, :dname, :loc)"
#test.insert(sql1, {'deptno': 50, 'dname': 'a', 'loc': 'b'})
#print('已经成功插入一行。')

sql1 = "update scott.dept t set t.dname = :dname, t.loc = :loc where t.deptno = :deptno"
test.update(sql1, {'deptno': 50, 'dname': 'aaa', 'loc': 'bbb'})
print('已经成功更新一行。')

sql = "delete scott.dept t where t.deptno = :deptno"
test.delete(sql, {'deptno': 90})
print('已经成功删除一行。')

sql = "begin pkg_test.pro_test(:i_deptno, :i_dname, :i_loc); end;"
test.procedure(sql, {'i_deptno': 11, 'i_dname': 'aaa3', 'i_loc': 'bbb3'})
print('已经通过存储过程成功插入一行。')

##以下为Oracle存储过程pkg_test对应的代码
‘’’
CREATE OR REPLACE PACKAGE pkg_test IS
PROCEDURE pro_test(i_deptno IN NUMBER,
i_dname IN VARCHAR2,
i_loc IN VARCHAR2);
END pkg_test;

CREATE OR REPLACE PACKAGE BODY pkg_test IS

PROCEDURE pro_test(i_deptno IN NUMBER,
i_dname IN VARCHAR2,
i_loc IN VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE ‘insert into scott.dept(deptno, dname, loc) values(:b1, :b2, :b3)’
USING i_deptno, i_dname, i_loc;

COMMIT;
END pro_test;
END pkg_test;

‘’’

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Thomas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值