community.general.mssql_script 模块 – 在 MSSQL 数据库上执行 SQL 脚本

注意

此模块是 community.general 集合 (版本 10.1.0) 的一部分。

如果您正在使用 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.general。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求

要在 playbook 中使用它,请指定:community.general.mssql_script

community.general 4.0.0 中的新增功能

概要

  • 在 MSSQL 数据库上执行 SQL 脚本。

要求

以下要求是在执行此模块的主机上所需的。

  • pymssql

参数

参数

注释

login_host

字符串 / 必需

运行数据库的主机。

login_password

字符串

用于身份验证的密码。

login_port

整数

MSSQL 服务器的端口。也需要定义 login_host

默认值: 1433

login_user

字符串

用于身份验证的用户名。

name

别名:db

字符串

要运行脚本的数据库。

默认值: ""

output

字符串

使用 default,每一行都将作为值列表返回。请参阅 query_results

输出格式 dict 将返回一个字典,其中列名称作为键。请参阅 query_results_dict

dict 需要每个查询返回命名的列,否则会抛出错误。

选项

  • "dict"

  • "default" ← (默认)

params

字典

作为 SQL 参数传递给脚本的参数。(查询 'SELECT %(name)s"'example: '{"name": "John Doe"}。)

script

字符串 / 必需

要执行的 SQL 脚本。

脚本可以包含多个 SQL 语句。多个批次可以用 GO 命令分隔。

每个批次必须返回至少一个结果集。

transaction

布尔值

community.general 8.4.0 中添加

如果请求事务模式,则启动事务,并且只有在脚本成功时才提交更改。否则,回滚事务。

如果不请求事务模式(默认),则自动提交更改。

选项

  • false ← (默认)

  • true

属性

属性

支持

描述

check_mode

支持:部分

在检查模式下不会执行脚本。

可以在 check_mode 中运行并返回更改状态预测,而无需修改目标。

diff_mode

支持:不支持

在差异模式下,将返回有关已更改内容(或可能需要在 check_mode 中更改)的详细信息。

备注

注意

  • 在远程主机上需要 pymssql Python 包。对于 Ubuntu,这很容易,只需 pip install pymssql(参见 ansible.builtin.pip。)

示例

- name: Check DB connection
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    db: master
    script: "SELECT 1"

- name: Query with parameter
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    script: |
      SELECT name, state_desc FROM sys.databases WHERE name = %(dbname)s
    params:
      dbname: msdb
  register: result_params
- assert:
    that:
      - result_params.query_results[0][0][0][0] == 'msdb'
      - result_params.query_results[0][0][0][1] == 'ONLINE'

- name: Query within a transaction
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    script: |
      UPDATE sys.SomeTable SET desc = 'some_table_desc' WHERE name = %(dbname)s
      UPDATE sys.AnotherTable SET desc = 'another_table_desc' WHERE name = %(dbname)s
    transaction: true
    params:
      dbname: msdb

- name: two batches with default output
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    script: |
      SELECT 'Batch 0 - Select 0'
      SELECT 'Batch 0 - Select 1'
      GO
      SELECT 'Batch 1 - Select 0'
  register: result_batches
- assert:
    that:
      - result_batches.query_results | length == 2  # two batch results
      - result_batches.query_results[0] | length == 2  # two selects in first batch
      - result_batches.query_results[0][0] | length == 1  # one row in first select
      - result_batches.query_results[0][0][0] | length == 1  # one column in first row
      - result_batches.query_results[0][0][0][0] == 'Batch 0 - Select 0'  # each row contains a list of values.

- name: two batches with dict output
  community.general.mssql_script:
    login_user: "{{ mssql_login_user }}"
    login_password: "{{ mssql_login_password }}"
    login_host: "{{ mssql_host }}"
    login_port: "{{ mssql_port }}"
    output: dict
    script: |
      SELECT 'Batch 0 - Select 0' as b0s0
      SELECT 'Batch 0 - Select 1' as b0s1
      GO
      SELECT 'Batch 1 - Select 0' as b1s0
  register: result_batches_dict
- assert:
    that:
      - result_batches_dict.query_results_dict | length == 2  # two batch results
      - result_batches_dict.query_results_dict[0] | length == 2  # two selects in first batch
      - result_batches_dict.query_results_dict[0][0] | length == 1  # one row in first select
      - result_batches_dict.query_results_dict[0][0][0]['b0s0'] == 'Batch 0 - Select 0'  # column 'b0s0' of first row

返回值

常见的返回值已在此处记录 此处,以下是此模块特有的字段

描述

query_results

列表 / 元素=列表

批次列表(用 GO 关键字分隔的查询)。

返回:成功和 output=default

示例: [[[["Batch 0 - Select 0"]], [["Batch 0 - Select 1"]]], [[["Batch 1 - Select 0"]]]]

queries

列表 / 元素=列表

每个查询的结果集列表。

如果某个查询没有返回结果,则此查询及之后所有查询的结果将不会包含在输出中。

使用 GO 关键字在 script 中分隔查询。

返回:成功

列表 / 元素=列表

查询返回的行列表。

返回:成功

列值

列表 / 元素=字符串

列值列表。

任何非标准 JSON 类型都将转换为字符串。

返回:如果输出为默认值,则返回成功

示例: ["Batch 0 - Select 0"]

query_results_dict

列表 / 元素=列表

批次列表(用 GO 关键字分隔的查询)。

返回:成功且 output=dict

示例: [[[["Batch 0 - Select 0"]], [["Batch 0 - Select 1"]]], [[["Batch 1 - Select 0"]]]]

queries

列表 / 元素=列表

每个查询的结果集列表。

如果某个查询没有返回结果,则此查询及之后所有查询的结果将不会包含在输出中。使用 ‘GO’ 关键字分隔查询。

返回:成功

列表 / 元素=列表

查询返回的行列表。

返回:成功

column_dict

字典

列名和值的字典。

任何非标准 JSON 类型都将转换为字符串。

返回:如果输出为字典,则返回成功

示例: {"col_name": "Batch 0 - Select 0"}

作者

  • Kris Budde (@kbudde)