.. _dbapi_odps:
DBAPI 接口
==========
.. Note:: 在 PyODPS 0.10.0 中开始支持。事务操作不被 MaxCompute 支持,因而未实现相关接口。
PyODPS 支持使用 `Python DBAPI `_
兼容的数据库访问接口访问 MaxCompute。
创建连接
-----------
可以通过指定 ``access_id``、\ ``access_key``、\ ``project``\ 和\ ``endpoint``
来建立连接:
.. code-block:: python
>>> import odps.dbapi
>>> conn = odps.dbapi.connect('', '', '', '')
也可以使用现有的 ODPS 入口对象来建立连接:
.. code-block:: python
>>> import odps.dbapi
>>> conn = odps.dbapi.connect(o) # type(o) is ODPS
如果要使用 MaxQA(MCQA 2.0)查询加速,可以指定 ``use_sqa='v2'`` 并指定 ``quota_name`` 参数:
.. code-block:: python
>>> conn = odps.dbapi.connect(o, use_sqa='v2', quota_name='my_quota')
执行 SQL
----------
你可以创建游标并在游标上执行 SQL:
.. code-block:: python
>>> 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 替换命名参数。
.. code-block:: python
>>> # 使用非命名参数
>>> 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 一样使用迭代的方式读取结果:
.. code-block:: python
>>> for rec in cursor:
>>> print(rec)
也可以一次性读取所有结果:
.. code-block:: python
>>> print(cursor.fetchall())