pyodps操作maxCompute

连接ODPS

from odps import ODPS
odps = ODPS('**your-access-id**', '**your-secret-access-key**', '**
your-default-project**',
endpoint='**your-end-point**')
your-default-project**',
endpoint='**your-end-point**')
这两个可省略,通过get_project命令获取到某个项⽬空间

创建非分区表data_temp:table_name,data_count,time 三个字段
table = odps.create_table('data_temp','table_name string, data_count bigint, time datetime',if_not_exists=True)

 操作表

t = odps.get_table('data_temp')

 插入数据,使用列表的形式

records = [['lrb', 344322, '2020-04-28 14:09:37'],       
           ['zcfzb', 4343434, '2020-04-28 14:09:37'],
           ['xjllb', 21142232, '2020-04-28 14:09:37'],
           ['test', 343242, '2020-04-28 14:09:37']]
odps.write_table('data_temp', records)

读取表中数据

with t.open_reader() as reader:
    count = reader.count
    for record in reader:
        #处理每一条数据

使用dataframe

df = t.to_df()

注:dataframe是maxCompute自己的,不具备pandas的dataframe一些功能(如:to_csv)

可以转成pandas的dataframe

pd_df = df.to_pandas()

打印如下

  table_name  data_count                time
0        lrb      344322 2020-04-28 14:09:37
1      zcfzb     4343434 2020-04-28 14:09:37
2      xjllb    21142232 2020-04-28 14:09:37
3       test      343242 2020-04-28 14:09:37

介于此,我们可以将数据直接导入MYSQL

from sqlalchemy import create_engine
connect = create_engine('mysql+pymysql://root:mysql@172.20.10.12:3306/odps?charset=utf8')
pd_df.to_sql("data_sync", connect, if_exists='append', index=False)

其中data_sync是mysql对应的表名,connect是mysql连接

由于我的Mysql表没有建立主键,所以当代码重复执行后,会写入多次。

需要注意的是:ODPS的表名和MYSQL的表名尽量保持一致,不然会报错。解决办法是导入mysql之前,更改dataframe列名即可。

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
posted on 2020-04-28 15:03  yhy233  阅读(2407)  评论(0编辑  收藏  举报