GBase 8a
其他
文章

从 Excel 读取数据入 GBase 8a MPP Cluster 库表的 Python 实现

发表于2023-08-22 11:03:57266次浏览1个评论

##### 一、项目需求:
       Python 语言编码的项目,需要将 Excel 数据导入 8a 集群。不能使用 ETL 工具。

##### 二、Python 实验环境:
       1、操作系统:windows 7 64 bit;
       2、Python 版本:3.6.8
       可从官网(https://www.python.org/)下载并安装。
       3、安装第三方组件:
       保证本机外网通畅的情况下,在控制台执行:
```Shell
pip install pandas
pip install munpy
```

##### 三、数据源和目标表:
1、数据源:drinks.xls
![image.png](https://oss-emcsprod-public.modb.pro/image/editor/20230822-b50005ed-a5a4-468b-a6df-fc059efbae75.png)
2、目标表结构:
```sql
CREATE TABLE "drinks" (
 "country" varchar(50) DEFAULT NULL,
 "beer_servings" int(11) DEFAULT NULL,
 "spirit_servings" int(11) DEFAULT NULL,
 "wine_servings" int(11) DEFAULT NULL,
 "total_litres_of_pure_alcohol" double DEFAULT NULL,
 "continent" varchar(50) DEFAULT NULL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace';
```

##### 四、实例代码:
```python
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
from GBaseConnector import connect,GBaseError
config = {'host':'111.161.65.149','port':32800,'database':'courseware',
         'user':'gbase','passwd':'gbase20110531'}

if __name__=='__main__':
   df = pd.read_excel('drinks.xls', keep_default_na=False) # 用 pandas 读取源文件到 dataframe 对象中,keep_default_na 的作用是处理空值
   ndData = np.array(df) # dataframe 转 ndArray Object
   lstData = ndData.tolist() # ndArray Object 转 list
   #print(lstData)
   try:
       conn = connect() # 创建数据库连接对象
       conn.connect(**config) # 导入数据库连接参数
       cur = conn.cursor() # 得到 cursor 对象

       opfmt = "INSERT INTO drinks(country,beer_servings,spirit_servings,wine_servings,total_litres_of_pure_alcohol,continent)\
        VALUES(%s, %s, %s, %s, %s, %s)" # 预处理 SQL 文

       cur.executemany(opfmt, lstData) # 批量插入列表中的数据到目标表 drinks
   except GBaseError.DatabaseError as e:
       print(e)
   finally:
       conn.close() # 关闭数据库连接
```

##### 五、查看结果:
```sql
select * from drinks;
```
![image.png](https://oss-emcsprod-public.modb.pro/image/editor/20230822-c0fa90a0-a8d6-4e18-98b3-fdbfdce5215c.png)

评论

登录后才可以发表评论
崔哥发表于 9个月前
嗯,只能说不错!