从 sqlite 迁移到 Oracle 数据库

news/2024/5/14 9:46:48

从 sqlite 迁移到 Oracle 数据库

  • 0. 引言
  • 1. 代码

0. 引言

今天发现一个有意思的竞赛,竞赛中使用了 sqlite 数据库。

由于个人更习惯 Oracle 数据库,所以将 sqlite 数据库迁移到了 Oracle 数据库。

此文章记录一下迁移时使用的 Python 代码。

1. 代码

import os
import sqlite3import oracledb
from dotenv import find_dotenv, load_dotenv_ = load_dotenv(find_dotenv())# 连接SQLite数据库
sqlite_conn = sqlite3.connect('./dataset/博金杯比赛数据.db')
sqlite_cursor = sqlite_conn.cursor()# 连接Oracle数据库
oracle_conn = oracledb.connect(user="username", password="password", dsn="host:port/service_name")
oracle_cursor = oracle_conn.cursor()# 获取SQLite数据库中的表名
sqlite_cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = sqlite_cursor.fetchall()def map_sqlite_type_to_oracle(sqlite_type):# 根据需要映射SQLite数据类型到Oracle数据类型# 这是一个更详尽的映射示例mapping = {'INTEGER': 'NUMBER(10)','TEXT': 'VARCHAR2(255)','REAL': 'FLOAT','BLOB': 'BLOB','NUMERIC': 'NUMBER'}return mapping.get(sqlite_type, 'VARCHAR2(255)')  # 默认类型为 VARCHAR2(255)# 迭代每个表
for table in tables:table_name = table[0]print(f"Migrating table: {table_name}")# 获取表结构sqlite_cursor.execute(f"PRAGMA table_info({table_name});")columns = sqlite_cursor.fetchall()# 构建并执行Oracle表的创建语句column_defs = ', '.join(f"\"{column[1]}\" {map_sqlite_type_to_oracle(column[2])}" for column in columns)create_table_query = f"CREATE TABLE {table_name} ({column_defs})"print(f"{create_table_query=}")oracle_cursor.execute(create_table_query)# 测试时想Drop掉Table时使用# oracle_cursor.execute(f"DROP TABLE {table_name}")# 准备批量插入语句col_placeholders = ', '.join([':' + str(i + 1) for i in range(len(columns))])insert_query = f"INSERT INTO {table_name} VALUES ({col_placeholders})"# 迁移数据sqlite_cursor.execute(f"SELECT * FROM {table_name};")rows = sqlite_cursor.fetchall()oracle_cursor.executemany(insert_query, rows)oracle_conn.commit()sqlite_conn.close()
oracle_conn.close()

完结!


http://www.mrgr.cn/p/88680121

相关文章

Asp .Net Core 系列:国际化多语言配置

目录概述术语本地化器IStringLocalizer在服务类中使用本地化IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer资源文件区域性回退配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件设计原理IStringLocalizerFactory…

提升编码技能:学习如何使用 C# 和 Fizzler 获取特价机票

引言 五一假期作为中国的传统节日,也是旅游热门的时段之一,特价机票往往成为人们关注的焦点。在这个数字化时代,利用爬虫技术获取特价机票信息已成为一种常见的策略。通过结合C#和Fizzler库,我们可以更加高效地实现这一目标&…

免费实用在线小工具

免费在线工具 https://orcc.online/ pdf在线免费转word文档 https://orcc.online/pdf 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA1/SHA256…) 计算 https://orcc.online/ha…

Linux内核之SPI协议

SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行的行业标准,但是并没有像I2C那样有标准文档,它还有主从、可片选的特性。图源自Serial Peripheral Interface-wikipedia 时序图放个经典老图,来源未知。相位和极性决定了采样点,主从采样点一致时数据正确,不一…

java实现模板填充word,word转pdf,pdf转图片

Java实现Word转PDF及PDF转图片 在日常开发中,我们经常需要将文件操作,比如: 根据模板填充wordword文档中插入图片Word文档转换为PDF格式将PDF文件转换为图片。 这些转换可以帮助我们在不同的场景下展示或处理文档内容。下面,我将…

modbus怎么写多个保持寄存器

近期,在做项目的时候,用到了modbus协议,有一个校时功能,就是需要定时发送时间到相应的设备,给相应的设备校时,协议里给出了寄存器地址和数据格式,如下 这个在程序里就需要写多个连续的保持寄存器,报文格式如下: 串口modbus报文格式 11 10 13 27 00 04 08 18 04 1C 0F …

03.Kafka 基本使用

Kafka 提供了一系列脚本用于命令行来操作 kafka。 1 Topic 操作 1.1 创建 Topic 创建一个名为 oldersix-topic 的 topic,副本数设置为3,分区数设置为2: bin/kafka-topics.sh \ --create \ --zookeeper 192.168.31.162:2181 \ --replication…

MCU自动测量单元:自动化数据采集的未来

随着科技的飞速发展,自动化技术在各个领域中的应用日益广泛。其中,MCU(微控制器)自动测量单元以其高效、精准的特性,成为自动化数据采集领域的佼佼者,引领着未来数据采集技术的革新。本文将深入探讨MCU自动测量单元的原理、优势以…

2024.4 ~ 若眨眼一瞬 定能像星辰般飞向宇宙

2024.4.3 \(40+100+40=180\)。今天过了一题/开心 草了,T2 空间开大 MLE 了,实际上只过了 \(0\) 题,如果不算这个就登顶了 fibonacci 首先答案一定可以在 \(S_{31}\) 中找到。具体地,找到最大的 \(i\) 使得 \(S_{i-4}< 3|t|\),取 \(S_i\) 即可。 这是因为首先任意三个相…

24.4.28(板刷dp,拓扑判环,区间dp+容斥算回文串总数)

星期一&#xff1a; 昨晚cf又掉分&#xff0c;小掉不算掉 补ABC350 D atc传送门 思路&#xff1a;对每个连通块&#xff0c;使其成为一个完全图&#xff0c;完全图的边数为 n*(n-1)/2 , 答案加上每个连通块成为完全图后的…

常用图像加密技术-流密码异或加密

异或加密是最常用的一种加密方式&#xff0c;广泛的适用于图像处理领域。这种加密方式依据加密密钥生成伪随机序列与图像的像素值进行异或操作&#xff0c;使得原像素值发生变化&#xff0c;进而使得图像内容发生变化&#xff0c;达到保护图像内容的目的。 该加密方法是以图像…

Pandas dataframe 中显示包含NaN值的单元格

大部分教程只讲如何打印含有NA的列或行。这个函数可以直接定位到单元格&#xff0c;当dataframe的行和列都很多的时候更加直观。 # Finding NaN locations for df.loc def locate_na(df):nan_indices set()nan_columns set()for col, vals in df_descriptors.items():for in…

目标错位是导致效果不佳的最终原因

很多事情没有做好其实是目标定位错了,就如上课听讲,目标应该是消化理解老师输出的知识,而有时我们却会过分看重做笔记,把目标不知不觉中变成了做好笔记,其实当做笔记影响理解知识的时候应该果断的抛弃笔记。 还有目前的小孩保护法,其最主要的目标应该是预防犯罪,最终却将…

一个开源轻量级的C#代码格式化工具(支持VS和VS Code)

前言 C#代码格式化工具除了ReSharper和CodeMaid,还有一款由.NET开源、免费(MIT License)、轻量级的C#语言代码格式化工具:CSharpier。 工具介绍 CSharpier是一款开源、免费、轻量级的C#语言代码格式化工具。它使用Roslyn来解析你的代码,并根据其自身的规则重新格式化代码。…

ESXi虚拟机的 %steal 时间 与 CPU 就绪的关系

ESXi虚拟机的 %steal 时间 与 CPU 就绪的关系概念解释 %steal 在top输出中, steal时间表示虚拟CPU等待真实CPU的时间。 这通常发生在虚拟化环境中, 当虚拟机尝试在其物理主机上运行CPU密集型任务时, 可能会出现steal时间增加的情况。 这表示虚拟机无法立即获得所需的CPU资源…

C++证道之路第十三章类继承

一、一个简单的基类 从一个类派生出另一个类时&#xff0c;原始类称为基类&#xff0c;继承类称为派生类。 派生类对象储存了基类的数据成员&#xff08;派生类继承了基类的实现&#xff09;。 派生类对象可以使用基类的方法&#xff08;派生类继承了基类的接口&#xff09;…

windows电脑改造为linux

有个大学用的旧笔记本电脑没啥用了&#xff0c;决定把它改成linux搭一个服务器&#xff1b; 一、linux安装盘制作 首先要有一个大于8G的U盘&#xff0c;然后去下载需要的linux系统镜像&#xff0c;我下的是ubuntu&#xff0c;这里自选版本 https://cn.ubuntu.com/download/d…

沉浸式翻译 chrome 插件 Immersive Translate - Translate Website PDF

免费翻译网站&#xff0c;翻译PDF和Epub电子书&#xff0c;双语翻译视频字幕 &#x1f4e3; 网络上口碑爆炸的网站翻译扩展工具【沉浸式翻译】⭐⭐⭐⭐⭐ &#x1f4bb; 功能特点如下&#xff1a; &#x1f4f0; 网站翻译 &#x1f680; 提供双语网站翻译&#xff0c;智能识…

java案例-服务端与客户端(传输对象)

需求 代码 SysUser 用户类Operation 操作类Client 客户端Server 服务端ServerReaderThread 服务端线程类 SysUser 用户类 需要实现Serializable 方便序列化&#xff0c;传输对象 public class SysUser implements Serializable {private String username;private String passwo…

《面向云计算的零信任体系第1部分:总体架构》行业标准正式发布

中华人民共和国工业和信息化部公告2024年第4号文件正式发布行业标准&#xff1a;YD/T 4598.1-2024《面向云计算的零信任体系 第1部分&#xff1a;总体架构》&#xff08;后简称“总体架构”&#xff09;&#xff0c;并于2024年7月1日正式施行。 该标准由中国信通院牵头&#xf…