PyODPS集成了SQLAlchemy,可以使用SQLAlchemy查询MaxCompute数据。本文为您介绍如何创建连接,并调用SQLAlchemy接口。

创建连接

创建连接语法格式如下。
from sqlalchemy import create_engine
engine = create_engine('odps://<access_id>:<access_key>@<project>/?endpoint=<endpoint>')
conn = engine.connect()
  • access_id:具备访问目标MaxCompute项目权限的AccessKey ID。

    您可以进入AccessKey管理页面获取AccessKey ID。

  • access_key:AccessKey ID对应的AccessKey Secret。

    您可以进入AccessKey管理页面获取AccessKey Secret。

  • project:目标MaxCompute项目的名称。

    此处为MaxCompute项目名称,非工作空间名称。您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签查看到具体的MaxCompute项目名称。

  • endpoint:目标MaxCompute项目所属地域的Endpoint。

    各地域的Endpoint信息,请参见Endpoint

对于已有的ODPS对象o,调用o.to_global()设为全局账号后,在连接串中就不需要指定上述参数。命令示例如下。
from sqlalchemy import create_engine
o.to_global()  # set ODPS object as global one
engine = create_engine('odps://')

调用SQLAlchemy接口

创建连接之后,就可以正常调用SQLAlchemy接口。建表、写入数据、查询示例如下。
  • 建表
    from sqlalchemy import Table, Column, Integer, String, MetaData
    metadata = MetaData()
    
    users = Table('users', metadata,
        Column('id', Integer),
        Column('name', String),
        Column('fullname', String),
    )
    
    metadata.create_all(engine)
  • 写入数据
    ins = users.insert().values(id=1, name='jack', fullname='Jack Jones')
    conn.execute(ins)
  • 查询数据
    from sqlalchemy.sql import select
    s = select([users])
    result = conn.execute(s)
    for row in result:
        print(row)

    返回值

    (1, 'jack', 'Jack Jones')