2.4 使用 Session 执行 SQL

除了 Session 对象的简化 X DevAPI 语法外,Session 对象还具有一个 sql() 函数,该函数接受任何 SQL 语句作为字符串。

以下示例使用 Session 在特定节点上调用 SQL 存储过程。

from mysqlsh import mysqlx

# Connect to server using a Session
mySession = mysqlx.get_session('user:password@localhost')

# Switch to use schema 'test'
mySession.sql("USE test").execute()

# In a Session context the full SQL language can be used
sql = """CREATE PROCEDURE my_add_one_procedure
                                 (INOUT incr_param INT)
                                 BEGIN
                                         SET incr_param = incr_param + 1;
                                 END
                        """

mySession.sql(sql).execute()
mySession.sql("SET @my_var = ?").bind(10).execute()
mySession.sql("CALL my_add_one_procedure(@my_var)").execute()
mySession.sql("DROP PROCEDURE my_add_one_procedure").execute()

# Use an SQL query to get the result
myResult = mySession.sql("SELECT @my_var").execute()

# Gets the row and prints the first column
row = myResult.fetch_one()
print(row[0])

mySession.close()

在使用字面/逐字 SQL 时,常见的 API 模式与使用 DML 和 CRUD 操作对表和集合的操作基本相同。存在两个区别:设置当前 Schema 和转义名称。