Skip to content

Python客户端

Ignite 3 客户端通过标准套接字连接接入集群,客户端不是集群拓扑的一部分,不会保存任何数据,也不会参与计算任务的执行。

Ignite DB API 驱动使用 Python 数据库 API

1.入门

1.1.前提条件

要运行 Python 驱动,需要满足以下条件:

  • CMake 3.18 或更高版本来构建驱动程序;
  • Python 3.9 或更高版本(测试了 3.9、3.10、3.11 和 3.12);
  • 访问正在运行的 Ignite 3 节点。

1.2.限制

当前版本不支持执行 SQL 脚本。

1.3.安装

要安装 Python DB API 驱动,请从 pip 下载:

shell
pip install pyignite_dbapi

之后就可以将pyignite_dbapi导入到自己的工程中使用。

2.接入集群

使用connect()方法可以接入集群:

python
addr = ['127.0.0.1:10800']
return pyignite_dbapi.connect(address=addr, timeout=10)

用完之后请记住一定要关闭与集群的连接。

python
conn.close()

或者也可以使用with语句在不再需要时自动关闭连接:

python
with pyignite_dbapi.connect(address=addr, timeout=10) as conn:
    conn.cursor()

2.1.配置SSL连接

如果要实现与集群的安全连接,可以通过提供密钥文件和证书来启用 SSL,例如:

python
def create_ssl_connection():
  """Create SSL-enabled connection to Ignite cluster."""
  addr = ['127.0.0.1:10800']
  return pyignite_dbapi.connect(
      address=addr,
      timeout=10,
      use_ssl=True,
      ssl_keyfile='<path_to_ssl_keyfile.pem>',
      ssl_certfile='<path_to_ssl_certfile.pem>',
      # Optional: ssl_ca_certfile='<path_to_ssl_ca_certfile.pem>'
  )

提示

证书文件和密钥的所有路径都应以适合系统的字符串格式提供。

2.2.配置认证

如果集群使用基本认证,则需要提供用户的identitysecret并对其进行认证,例如:

python
def create_authenticated_connection():
  """Create authenticated connection to Ignite cluster."""
  addr = ['127.0.0.1:10800']
  return pyignite_dbapi.connect(
      address=addr,
      timeout=10,
      identity='user',
      secret='password'
  )

2.3.配置数据访问

可以配置可选属性来微调数据的访问方式。

配置名描述
schema使用的模式名。默认值:PUBLIC
page_size单个请求中可以接收或发送的最大行数。默认值:1024

以下示例演示了如何设置这些属性:

python
def create_configured_connection():
  """Create authenticated connection to Ignite cluster."""
  addr = ['127.0.0.1:10800']
  return conn = pyignite_dbapi.connect(
    address=addr,
    timeout=10,
    schema='CUSTOM',
    page_size=2048
  )

3.获取游标对象

要在 Python 客户端中处理表,需使用从连接对象中获取的cursor对象:

python
conn.cursor()

与连接类似,可以在获取游标时使用with语句:

python
with conn.cursor() as cursor:

4.执行单个查询

游标对象可通过execute命令执行 SQL 语句:

python
# Create table
cursor.execute('''
          CREATE TABLE Person(
              id INT PRIMARY KEY,
              name VARCHAR,
              age INT
          )
      ''')

5.执行批处理查询

可以使用executemany命令执行具有一批参数的 SQL 查询,这种操作的性能比执行单个查询高得多。下面的示例将插入 Person 表几行数据:

python
# Sample data
sample_data = [
  [1, "John", 30],
  [2, "Jane", 32],
  [3, "Bob", 28]
]

# Insert data (fixed table name)
cursor.executemany('INSERT INTO Person VALUES(?, ?, ?)', sample_data)

6.获取查询结果

游标保留对操作的引用。如果操作返回结果(例如,一个SELECT),它们会存储在游标中。然后可以使用fetchone()方法从游标中拿到查询结果:

python
# Query data
cursor.execute('SELECT * FROM Person ORDER BY id')
results = cursor.fetchall()

print("All persons in database:")
for row in results:
  print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")

7.使用事务

数据库操作所需的事务默认是隐式处理的,但是也可以禁用自动事务处理并手动处理提交。

为此,首先要禁用自动提交:

python
conn.autocommit = False

禁用自动提交后,就需要手动提交事务:

python
# Insert valid records
cursor.execute('INSERT INTO Person VALUES(?, ?, ?)', [4, "Alice", 29])
cursor.execute('INSERT INTO Person VALUES(?, ?, ?)', [5, "Charlie", 31])

cursor.execute('INSERT INTO Person VALUES(?, ?, ?)', [6, "Invalid", new_age])

conn.commit()
print("Transaction committed successfully")

未提交的操作将发送到集群,但不会写入表。仅在调用commit方法时才会更新该表,也可以使用rollback命令回滚所有未提交的操作:

python
with conn.cursor() as cursor:
  try:
    # Insert valid records
    cursor.execute('INSERT INTO Person VALUES(?, ?, ?)', [4, "Alice", 29])
    cursor.execute('INSERT INTO Person VALUES(?, ?, ?)', [5, "Charlie", 31])

    cursor.execute('INSERT INTO Person VALUES(?, ?, ?)', [6, "Invalid", new_age])

    conn.commit()
    print("Transaction committed successfully")

  except Exception as e:
    # Rollback on any error
    conn.rollback()
    print(f"Transaction rolled back due to error: {e}")

提示

rollback命令会回滚所有未提交的数据。

18624049226