import cx_Oracle
import json
cx_Oracle.init_oracle_client(lib_dir=r"D:\Program Files\instantclient_11_2")
dsn = cx_Oracle.makedsn('数据库地址', 端口, service_name='链接名称')
connection = cx_Oracle.connect(user='用户', password='密码', dsn=dsn)
cursor = connection.cursor()
query = "SELECT TABLE_NAME " \
"FROM user_tables " \
"WHERE TABLESPACE_NAME = 'HSWG_PAD'"
cursor.execute(query)
result = cursor.fetchall()
set_data = set()
for row in result:
# 获取 table_name
set_data.add(row[0])
print(set_data)
# 生成序列名称
for table_name in set_data:
sequence_name = "SEQ_"+table_name
try:
query = "alter sequence {seqID} increment by 1".format(seqID=sequence_name)
cursor.execute(query)
except:
print("error")
pass
query = "select +" + sequence_name + ".nextval from dual"
seq_end = None
try:
cursor.execute(query)
result = cursor.fetchall()
# print("result", result)
seq_end = result[0][0]
except:
pass
if seq_end is None:
continue
query = "SELECT cols.table_name, cols.column_name, cons.constraint_name " \
"FROM user_constraints cons " \
"JOIN user_cons_columns cols " \
"ON cons.constraint_name = cols.constraint_name " \
"WHERE cons.constraint_type = 'P' " \
"AND cols.position = 1 " \
"AND cols.table_name = '{table_name}'".format(table_name=table_name)
# print("query", query)
idName = None
try:
cursor.execute(query)
result = cursor.fetchall()
# print("result", result)
idName = result[0][1]
except:
# print("error")
pass
if idName is None:
continue
# print("table_name", table_name, "idName", idName, "seq_end", seq_end)
query = "select max({idName}) from {table_name}".format(idName=idName, table_name=table_name)
# print("query", query)
max_id = None
# try:
cursor.execute(query)
# 打印所有结果
result = cursor.fetchall()
# print("result", result)
max_id = result[0][0]
# except:
# pass
add_id = 0
if max_id:
if max_id >= seq_end:
print("table_name", table_name, "idName", idName, "seq_end", seq_end, "max_id", max_id)
add_id = max_id+ 1 - seq_end
else:
continue
else:
continue
print("max_id", max_id, "add_id", add_id)
query = "alter sequence {table_name} increment by {add_id}".format(table_name=sequence_name, add_id=add_id)
cursor.execute(query)
query = "select +" + sequence_name + ".nextval from dual"
cursor.execute(query)
result = cursor.fetchall()
seq_end = result[0][0]
print("seq_end", seq_end,"max_id", max_id, "add_id", add_id)
try:
query = "alter sequence {seqID} increment by 1".format(seqID=sequence_name)
cursor.execute(query)
except:
print("error")
pass
cursor.close()
connection.close()
使用Python 批量解决 Oracle数据库违反唯一约束条件 问题
最新推荐文章于 2024-02-20 10:03:54 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)