Python将一个文件夹的文件装载到ORACLE数据库BLOB列,并将BLOB列下载到另一个文件夹

import os

import cx_Oracle

# get all files inside a specific folder
dir_path = r'C:/Users/Administrator/PycharmProjects/pythonProject9/InputFiles/'
for path in os.scandir(dir_path):
    if path.is_file():
        print(path.name)
        with open(dir_path + path.name, 'rb') as file:
            binaryData = file.read()
            try:
                con = cx_Oracle.connect('scott/tiger@192.168.50.128:1521/orcl')

            except cx_Oracle.DatabaseError as er:
                print('There is an error in the Oracle database:', er)

            else:
                try:
                    cur = con.cursor()

                    cur.execute("""
                            insert into bindata (name, data)
                            values (:name, :data)""",
                                name=path.name, data=binaryData)
                    con.commit()
                    print("Image and file inserted successfully as a BLOB into python_employee table")

                except cx_Oracle.DatabaseError as er:
                    print('There is an error in the Oracle database:', er)

                except Exception as er:
                    print('Error:' + str(er))

                finally:
                    if cur:
                        cur.close()

            finally:
                if con:
                    con.close()
import cx_Oracle


dir_path = r'C:/Users/Administrator/PycharmProjects/pythonProject9/DownLoadFiles/'
try:
    con = cx_Oracle.connect('scott/tiger@192.168.50.128:1521/orcl')

except cx_Oracle.DatabaseError as er:
    print('There is an error in the Oracle database:', er)

else:
    try:
        cur = con.cursor()

        # fetchall() is used to fetch all records from result set
        cur.execute('select * from bindata')
        for rows in cur:
            print(rows)
            print(rows[1])
            with open(dir_path + rows[1], "wb") as f:
                data = rows[2].read()
                f.write(data)




    except cx_Oracle.DatabaseError as er:
        print('There is an error in the Oracle database:', er)

    except Exception as er:
        print('Error:' + str(er))

    finally:
        if cur:
            cur.close()

finally:
    if con:
        con.close()
CREATE TABLE "SCOTT"."BINDATA" (
    "ID"   NUMBER(10, 0),
    "NAME" VARCHAR2(512 BYTE),
    "DATA" BLOB
)
 
ALTER TABLE bindata ADD (
    CONSTRAINT bindata_pk PRIMARY KEY ( id )
);
 
CREATE SEQUENCE bindata_sequence;
 
CREATE OR REPLACE TRIGGER bindata_on_insert BEFORE
    INSERT ON bindata
    FOR EACH ROW
BEGIN
    SELECT
        bindata_sequence.NEXTVAL
    INTO :new.id
    FROM
        dual;
 
END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值