PyODPS集成了SQLAlchemy,可以使用SQLAlchemy查询MaxCompute数据。本文为您介绍如何创建连接,并调用SQLAlchemy接口。
创建连接
创建连接语法格式如下。
import os
from sqlalchemy import create_engine
# 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
# 不建议直接使用 Access Key ID / Access Key Secret 字符串
conn_string = 'odps://%s:%s@<project>/?endpoint=<endpoint>' % (
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
)
engine = create_engine(conn_string)
conn = engine.connect()
ALIBABA_CLOUD_ACCESS_KEY_ID:具备访问目标MaxCompute项目权限的AccessKey ID,建议设为环境变量。
您可以进入AccessKey管理页面获取AccessKey ID。
ALIBABA_CLOUD_ACCESS_KEY_SECRET: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')