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 参数传递给脚本的参数。(使用 example: '{"name": "John Doe"}。 查询 'SELECT %(name)s"'。)

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

示例: [[[["批次 0 - 选择 0"]], [["批次 0 - 选择 1"]]], [[["批次 1 - 选择 0"]]]]

queries

列表 / 元素=列表

每个查询的结果集列表。

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

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

返回: 成功

rows

列表 / 元素=列表

查询返回的行列表。

返回: 成功

column_value

列表 / 元素=字符串

列值列表。

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

返回: 成功,如果 output 是 default

示例: ["批次 0 - 选择 0"]

query_results_dict

列表 / 元素=列表

批处理列表(查询之间用 GO 关键字分隔)。

返回: 成功,且 output=dict

示例: [[[["批次 0 - 选择 0"]], [["批次 0 - 选择 1"]]], [[["批次 1 - 选择 0"]]]]

queries

列表 / 元素=列表

每个查询的结果集列表。

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

返回: 成功

rows

列表 / 元素=列表

查询返回的行列表。

返回: 成功

column_dict

字典

列名和值的字典。

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

返回: 成功,如果 output 是 dict

示例: {"col_name": "批次 0 - 选择 0"}

作者

  • Kris Budde (@kbudde)