Python API

Database

class RPA.Database.Database

Database is a library for handling different database operations.

All database operations are supported. Keywords Query and Get Rows return values by default in RPA.Table format.

Library is compatible with any Database API Specification 2.0 module.

Workaround for inserting large JSON data for Call Stored Procedure

Workaround is to use instead Query keyword. At the moment there is no known fix for the Call Stored Procedure keyword as it fails if JSON string is more than 8000 characters long.

Robot Framework

${data}=    Load JSON from file    random_data.json
${json}=    Convert JSON to String    ${data}
# Single quotes around ${json} string are necessary
Query    exec InsertJsonDataToSampleTable '${json}'

References:

Examples

Robot Framework

*** Settings ***
Library         RPA.Database

*** Tasks ***
Get Orders From Database
    Connect To Database  pymysql  tester  user  password  127.0.0.1
    @{orders}            Query    Select * FROM incoming_orders
    FOR   ${order}  IN  @{orders}
        Handle Order  ${order}
    END

Python

from RPA.Database import Database
from RPA.Robocorp.Vault import FileSecrets

filesecrets = FileSecrets("secrets.json")
secrets = filesecrets.get_secret("databasesecrets")

db = Database()
db.connect_to_database('pymysql',
                    secrets["DATABASE"],
                    secrets["USERNAME"],
                    secrets["PASSWORD"],
                    '127.0.0.1'
                    )
orders = db.query("SELECT * FROM incoming_orders")
for order in orders:
    print(order)
ROBOT_LIBRARY_DOC_FORMAT = 'REST'
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
call_stored_procedure(name: str, params: Optional[List[str]] = None, sanstran: Optional[bool] = False, as_table: Optional[bool] = True, multiple: Optional[bool] = False) Union[Table, List[str]]

Call stored procedure with name and params.

Parameters
  • name – procedure name

  • params – parameters for the procedure as a list, defaults to None

  • sanstran – Run the query without an implicit transaction commit or rollback if such additional action was detected. (turned off by default)

  • as_table – If the result should be an instance of Table, otherwise a list will be returned. (defaults to True)

  • multiple – Return results for one result set (default False) or multiple results from all result sets (set this parameter to True)

Returns

list of results

Example:

@{params}     Create List   FirstParam   SecondParam   ThirdParam
@{results}    Call Stored Procedure   mystpr  ${params}
connect_to_database(module_name: Optional[str] = None, database: Optional[str] = None, username: Optional[str] = None, password: Optional[str] = None, host: Optional[str] = None, port: Optional[int] = None, charset: Optional[str] = None, config_file: Optional[str] = 'db.cfg', autocommit: Optional[bool] = False) None

Connect to database using DB API 2.0 module.

Note. The SSL support had been added for mysql module in rpaframework==17.7.0. The extra configuration parameters can be given via configuration file. Extra parameters are:

  • ssl_ca

  • ssl_cert

  • ssl_key

  • client_flags

Example configuration file:

[default]
host=hostname.mysql.database.azure.com
port=3306
username=username@hostname
database=databasename
client_flags=SSL,FOUND_ROWS
ssl_ca=DigiCertGlobalRootG2.crt.pem
Parameters
  • module_name – database module to use

  • database – name of the database

  • username – of the user accessing the database

  • password – of the user accessing the database

  • host – SQL server address

  • port – SQL server port

  • charset – for example, “utf-8”, defaults to None

  • config_file – location of configuration file, defaults to “db.cfg”

  • autocommit – set autocommit value for connect

Example:

Connect To Database  pymysql  database  username  password  host  port
Connect To Database  ${CURDIR}${/}resources${/}dbconfig.cfg

${secrets}=    Get Secret    azuredb
Connect To Database
...    mysql.connector
...    password=${secrets}[password]
...    config_file=${CURDIR}${/}azure.cfg
description(table: str) list

Get description of the SQL table

Parameters

table – name of the SQL table

Returns

database descripton as a list

Example:

Connect To Database    pymysql  mydb  user  pass  127.0.0.1
${db_description}      Description  mytable
disconnect_from_database() None

Close connection to SQL database

Example:

Connect To Database    pymysql  mydb  user  pass  127.0.0.1
${result}              Query   Select firstname, lastname FROM table
Disconnect From Database
execute_sql_script(filename: str, sanstran: Optional[bool] = False, encoding: Optional[str] = 'utf-8') None

Execute content of SQL script as SQL commands.

Parameters
  • filename – filepath to SQL script to execute

  • sanstran – Run the query without an implicit transaction commit or rollback if such additional action was detected. (turned off by default)

  • encoding – character encoding of file (utf-8 by default)

Example:

Execute SQL Script   script.sql
get_number_of_rows(table: str, conditions: Optional[str] = None) int

Get number of rows in a table. Conditions can be given as arguments for WHERE clause.

Parameters
  • table – name of the SQL table

  • conditions – restrictions for selections, defaults to None

Returns

number or rows

Example:

${count}   Get Number Of Rows  tablename
${count}   Get Number Of Rows  tablename  column1=5 and column2='x'
get_rows(table, columns: Optional[str] = None, conditions: Optional[str] = None, as_table: Optional[bool] = True) Union[List, Dict, Table, Any]

Get rows from table. Columns and conditions can be set to filter result.

Parameters
  • table – name of the SQL table

  • columns – name of columns to return, defaults to None means that all columns are returned

  • conditions – limiting result by WHERE clause, defaults to None

  • as_table – if result should be instance of Table, defaults to True False means that return type would be list

Returns

table or list based on param as_table arguement

Example:

@{res}   Get Rows  tablename  arvo
@{res}   Get Rows  tablename  arvo  columns=id,name
@{res}   Get Rows  tablename  columns=id  conditions=column1='newvalue'
@{res}   Get Rows  tablename  conditions=column2='updatedvalue'
query(statement: str, assertion: Optional[str] = None, sanstran: Optional[bool] = False, as_table: Optional[bool] = True, returning: Optional[bool] = None, data: Optional[Union[Dict, Tuple]] = None) Union[List, Dict, Table, Any]

Execute a SQL query and optionally return the execution result.

Security Warning: In order to safely include untrusted data in SQL queries it is advisable to use parameterized queries. For more information about formatting for specific databases, please see https://bobby-tables.com/python

Parameters
  • statement – SQL statement to execute.

  • assertion – Assert on query result, row_count or columns. Works only for SELECT statements. (defaults to None)

  • sanstran – Run the query without an implicit transaction commit or rollback if such additional action was detected and this is set to True. (turned off by default, meaning that commit is performed on successful queries and rollback on failing ones automatically)

  • as_table – If the result should be an instance of Table, otherwise a list will be returned. (defaults to True)

  • returning – Set this to True if you want to have rows explicitly returned (instead of the query result), False otherwise. (by default a heuristic detects if it should return or not)

  • data – The data to use if the SQL statement is parameterized

Returns

Fetched rows when returning is True or if the heuristic decides that the statement should return (raw rows or as Table if as_table is True), otherwise the object produced by the execution is returned.

Examples

Robot Framework

*** Settings ***
Library    RPA.Database

*** Tasks ***
Select Values From Table
    @{rows} =    Query   SELECT id,value FROM table
    FOR  ${row}  IN  @{rows}
        Log   ${row}
    END
    @{res} =    Query   Select * FROM table   row_count > ${EXPECTED}
    @{res} =    Query   Select * FROM table   'value' in columns
    @{res} =    Query   Select * FROM table   columns == ['id', 'value']
    @{res} =    Query   Select * FROM table WHERE value = ?  data=("${d}", )
    # Calling Stored Procedure with Query keyword requires that parameter
    # 'returning' is set to 'True'
    @{res} =    Query   Exec stored_procedure  returning=True

Python

from RPA.Database import Database

lib = Database()

def insert_and_return_names():
    lib.connect_to_database("sqlite3", "sqlite.db")
    lib.query("DROP TABLE IF EXISTS orders;")
    lib.query("CREATE TABLE orders(id INTEGER PRIMARY KEY, name TEXT);")
    data1 = "my-1st-order"
    data2 = "my-2nd-order"
    lib.query(
        'INSERT INTO orders(id, name) VALUES(1, ?), (2, ?);',
        data=(data1, data2)
    )
    rows = lib.query(
        'SELECT * FROM orders'
    )
    print([row["name"] for row in rows])  # ['my-1st-order', 'my-2nd-order']
set_auto_commit(autocommit: bool = True) None

Set database auto commit mode.

Parameters

autocommit – boolean value for auto commit, defaults to True

Example:

Set Auto Commit             # auto commit is set on
Set Auto Commit   False     # auto commit is turned off