DBAPI 接口
备注
在 PyODPS 0.10.0 中开始支持。事务操作不被 MaxCompute 支持,因而未实现相关接口。
PyODPS 支持使用 Python DBAPI 兼容的数据库访问接口访问 MaxCompute。
创建连接
可以通过指定 access_id、access_key、project和endpoint
来建立连接:
>>> import odps.dbapi
>>> conn = odps.dbapi.connect('<access_id>', '<access_key>', '<project>', '<endpoint>')
也可以使用现有的 ODPS 入口对象来建立连接:
>>> import odps.dbapi
>>> conn = odps.dbapi.connect(o) # type(o) is ODPS
如果要使用 MaxQA(MCQA 2.0)查询加速,可以指定 use_sqa='v2' 并指定 quota_name 参数:
>>> conn = odps.dbapi.connect(o, use_sqa='v2', quota_name='my_quota')
执行 SQL
你可以创建游标并在游标上执行 SQL:
>>> cursor = conn.cursor()
>>> cursor.execute("SELECT * FROM pyodps_iris")
>>> print(cursor.description)
[('sepal_length', 'double', None, None, None, None, True),
('sepal_width', 'double', None, None, None, None, True),
('petal_length', 'double', None, None, None, None, True),
('petal_width', 'double', None, None, None, None, True),
('category', 'string', None, None, None, None, True)]
PyODPS 使用与标准库 sqlite3 一样的参数指定方式指定查询参数。你可以使用 ? 指定非命名参数,
使用 :name 指定命名参数,并使用 tuple 替换非命名参数,使用 dict 替换命名参数。
>>> # 使用非命名参数
>>> cursor.execute("SELECT * FROM pyodps_iris WHERE petal_length > ?", (1.5,))
>>> print(cursor.fetchone())
[5.4, 3.9, 1.7, 0.4, 'Iris-setosa']
>>> # 使用命名参数
>>> cursor.execute("SELECT * FROM pyodps_iris WHERE petal_length > :length", {'length': 1.5})
>>> print(cursor.fetchone())
[5.4, 3.9, 1.7, 0.4, 'Iris-setosa']
读取结果
你可以使用和标准的 DBAPI 一样使用迭代的方式读取结果:
>>> for rec in cursor:
>>> print(rec)
也可以一次性读取所有结果:
>>> print(cursor.fetchall())