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数据库中的完整流程。根据您的实际需求,可能需要对代码进行适当的调整和优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youyouxiong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值