当前位置: 首页 > news >正文

Python读取csv文件入Oracle数据库

在Python中,使用`pandas`库的`read_sql_query`函数可以直接从SQL查询中读取数据到`DataFrame`。而`pd.set_option`函数用于设置`pandas`的显示选项。具体来说,`display.unicode.ambiguous_as_wide`选项用于控制当字符宽度不明确时,`pandas`是否将这些字符显示为宽字符。设置为`True`可以确保这些字符以宽字符的形式显示,这在处理某些Unicode字符时非常有用。

以下是如何使用`pandas`读取SQL查询结果,并使用`cx_Oracle`库将数据批量插入到Oracle数据库中的步骤:

### 步骤1:设置pandas显示选项

```python
import pandas as pd

# 设置pandas显示选项,确保不明确的Unicode字符以宽字符形式显示
pd.set_option('display.unicode.ambiguous_as_wide', True)
```

### 步骤2:读取SQL查询结果到DataFrame

```python
# 假设engine是一个SQLAlchemy引擎对象,sql是一个有效的SQL查询语句
from sqlalchemy import create_engine

# 创建数据库引擎(如果尚未创建)
engine = create_engine("oracle+cx_oracle://{username}:{password}@{hostname}:{port}/{service_name}"
                      .format(username="your_username",
                              password="your_password",
                              hostname="your_host",
                              port="your_port",
                              service_name="your_service_name"))

# 读取SQL查询结果到DataFrame
df = pd.read_sql_query(sql, engine)
```

请确保将上述代码中的`your_username`、`your_password`、`your_host`、`your_port`和`your_service_name`替换为您的Oracle数据库的实际连接信息。

### 步骤3:准备数据以进行批量插入

在将数据从`DataFrame`批量插入到Oracle数据库之前,您可能需要对数据进行清洗或转换,以确保它符合数据库表的结构。

```python
# 假设df是一个已经存在的DataFrame,且已经准备好用于插入
# 如果需要,可以在这里对df进行清洗或转换
```

### 步骤4:执行批量插入操作

使用`cx_Oracle`库的`executemany`方法执行批量插入:

```python
import cx_Oracle

# 获取数据库连接和游标
connection = engine.connect()
cursor = connection.cursor()

# 准备插入数据的SQL语句
# 假设df是你的DataFrame,且它包含列'column1'和'column2'
insert_statement = "INSERT INTO your_table (column1, column2) VALUES (:1, :2)"

# 使用DataFrame的iterrows()方法来获取数据并执行批量插入
for index, row in df.iterrows():
    cursor.execute(insert_statement, (row['column1'], row['column2']))

# 提交事务
connection.commit()
```

### 步骤5:关闭数据库连接

在数据插入完成后,关闭游标和数据库连接:

```python
# 关闭游标和连接
cursor.close()
connection.close()
```

以上步骤展示了如何使用`pandas`读取SQL查询结果到DataFrame,并对数据进行处理后,使用`cx_Oracle`库将数据批量插入到Oracle数据库中的完整流程。根据您的实际需求,可能需要对代码进行适当的调整和优化。

相关文章:

  • vivado 使用远程主机和计算群集
  • 接招吧! selenium环境+元素定位大法
  • TCP重传机制详解——03DSACK
  • jvm高级面试题-2024
  • 如何在Appium中使用AI定位
  • yarn安装包时报错error Error: certificate has expired
  • IDEA2023版本整合SpringBoot热部署
  • GEE训练——如何实现单景影像边界的提取以sentinel和Landsat数据为例(栅格转矢量)
  • github加速神器!解决github巨慢的问题,并且能够加速下载!另外推荐GitKraken -- 超好用的 Git 可视化工具
  • 数字孪生项目中实时数据驱动多节相连车厢沿轨道运行
  • SEO 的未来:GPT 和 AI 如何改变关键词研究
  • 蓝桥杯刷题计划-洛谷-持续更新
  • 价格才不是小米汽车的最大“杀器”
  • 阿里云对象存储OSS入门
  • JavaSE day14笔记
  • $translatePartialLoader加载失败及解决方式
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ComponentOne 2017 V2版本正式发布
  • CSS居中完全指南——构建CSS居中决策树
  • css属性的继承、初识值、计算值、当前值、应用值
  • ES6之路之模块详解
  • Java的Interrupt与线程中断
  • k8s如何管理Pod
  • magento2项目上线注意事项
  • mockjs让前端开发独立于后端
  • Redis字符串类型内部编码剖析
  • SpingCloudBus整合RabbitMQ
  • Spring框架之我见(三)——IOC、AOP
  • 对JS继承的一点思考
  • 你真的知道 == 和 equals 的区别吗?
  • 前言-如何学习区块链
  • 交换综合实验一
  • # Panda3d 碰撞检测系统介绍
  • #includecmath
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (第61天)多租户架构(CDB/PDB)
  • (翻译)terry crowley: 写给程序员
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (五)c52学习之旅-静态数码管
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Unity3DUnity3D在android下调试
  • (转)平衡树
  • (转)人的集合论——移山之道
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net Web窗口页属性
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net2005怎么读string形的xml,不是xml文件。
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • ??eclipse的安装配置问题!??