python 操作oracle
表DDL
-- "C##TAPDATA_TEST".ALAM3 definition
CREATE TABLE "C##TAPDATA_TEST"."ALAM3"
( "UID1" VARCHAR2(100) NOT NULL ENABLE,
"UID2" VARCHAR2(100) NOT NULL ENABLE,
"COLUMN1" VARCHAR2(100),
"COLUMN2" VARCHAR2(100),
"COLUMN3" VARCHAR2(100),
"COLUMN4" VARCHAR2(100),
"COLUMN5" VARCHAR2(100),
"COLUMN6" VARCHAR2(100),
"COLUMN7" VARCHAR2(100),
"COLUMN8" VARCHAR2(100),
"COLUMN9" VARCHAR2(100),
"COLUMN10" VARCHAR2(100),
"CREATETIME" TIMESTAMP (6),
"UPDATETIME" TIMESTAMP (6)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
CREATE UNIQUE INDEX "C##TAPDATA_TEST"."ALAM3_UID1_IDX" ON "C##TAPDATA_TEST"."ALAM3" ("UID1", "UID2")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
代码如下
import time
import cx_Oracle as oracledb
from random import randint
# import sample_env
source_db_username = 'C##TAPDATA_TEST'
source_db_password = 'ikasinfo123'
source_db_host = '192.168.10.155'
source_db_port = "1521"
source_db_sid = 'ORCLCDB'
connect = source_db_host + ':' + source_db_port + '/' + source_db_sid
oracledb.init_oracle_client(
lib_dir=r'C:\Users\zheng.jianhang\AppData\Local\Programs\Python\Python310\instantclient_21_6')
class alam_oracle:
def __init__(self):
# connection = oracledb.connect(sample_env.get_main_connect_string())
self.con = oracledb.connect(source_db_username,
source_db_password,
connect)
def query(self, sql="select max(UID1+0) from ALAM3"):
cursor = self.con.cursor()
# print("Get all rows via iterator")
cursor.execute(sql)
result = cursor.fetchone()
# print(result)
result = result if isinstance(result[0], int) else (0,)
return result
def insert(self, result, num=10000):
# print(result)
cursor = self.con.cursor()
rows = []
# print(result[0])
start = result[0] + 1
# print(start)
end = start + num
for i in range(start, end):
rows.append((i, i))
# predefine maximum string size to avoid data scans and memory reallocations;
# the None value indicates that the default processing can take place
cursor.setinputsizes(None, 20)
# cursor.executemany("insert into ALAM(COLUMN1, COLUMN2, COLUMN3) values (:1, :2, :3)", rows)
cursor.executemany(
"insert into ALAM3(UID1, UID2, "
"COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5, COLUMN6, COLUMN7,COLUMN8, COLUMN9, COLUMN10, "
"CREATETIME) "
"values(:1, :1, :1, :1, :1, :1, :1, :1, "
"dbms_random.string('x', 20), dbms_random.string('x', 20), "
"dbms_random.string('x', 20), dbms_random.string('x', 20), "
"sysdate)", rows)
self.con.commit()
def update(self, max, count):
cursor = self.con.cursor()
uid_list = []
for i in range(count):
uid_list.append(randint(1, max))
COLUMN_num = randint(1, 10)
# print(tuple(uid_list))
sql = "UPDATE ALAM3 SET " \
"COLUMN" + str(COLUMN_num) + "=dbms_random.string('x', 20) ," \
"UPDATETIME=sysdate " \
"WHERE UID1 in" + str(tuple(uid_list)) + ""
# print(sql)
cursor.execute(sql)
self.con.commit()
if __name__ == '__main__':
pass
a = alam_oracle()
r = a.query()
stime = time.time()
# a.update(r[0], 100)
a.insert(r, num=10000)
print(time.time() - stime)
- 插入时间消耗不大,
- 更新随数量增加而增加

浙公网安备 33010602011771号