Creating tons of snowflake database users is always tedious work and dependency on DBA or Cloud DBA so in order eliminate this we need to create python scripts with set of arguments to execute Snowflake Database Queries. Moreover it is easy to integrate to self service tools like Jenkins, Rundeck or User Management tools


## Date       : 04/18/2021
## Version    : v1
## Author     : Sandeep Reddy
## Purpose    : To create snowflake user using python script by passing arguments. goal is to integrate this self-service tools
## Usage      : python cr_usernsf.py email lanid role warehouse database comments
## Example    : python cr_usernsf.py youremail@deeds.com RL_DBA_ROLE  WH_DBA_SM_XS DBA1 CHRWELL_TICKET

import os
import snowflake.connector
from snowflake.connector.errors import DatabaseError, ProgrammingError
import sys
sys.tracebacklimit=0
#userid = sys.argv[1];

sql = "call dba1.db_users.create_user('"+sys.argv[1]+"','"+sys.argv[2]+"','"+sys.argv[3]+"','"+sys.argv[4]+"','"+sys.argv[5]+"','"+sys.argv[6]+"');"
#print (sql)
#exit()



if __name__ == '__main__':
    try:
        con = snowflake.connector.connect(
            user='D',
            password=,
            account='us-east-1',
            warehouse='WH_DBA_SM_XS',
            database='DBA1',
            schema='DB_USERS',
            role='RL_DBA_ROLE'  # <-------- This is correct
        )
    except DatabaseError as db_ex:
        if db_ex.errno == 250001:
            print(f"Invalid username/password, please re-enter username and password...")
            # code for user to re-enter username & pass
        else:
            raise
    except Exception as ex:
        # Log this
        print(f"Execution error: {ex}")
        raise
    else:
        try:
            print ("Executing this query:", sql +"in Snowflake Database" )
            results = con.cursor().execute(sql).fetchall()
            print(results)
        except con.ProgrammingError as e:
            print('SQL Execution Error: {0}'.format(e.msg))
            print('Snowflake Query Id: {0}'.format(e.sfqid))
            print('Error Number: {0}'.format(e.errno))
            print('SQL State: {0}'.format(e.sqlstate))
            raise
        finally:
            con.close()


Script Execution 
python cr_usernsf.py python cr_usernsf.py youremail@deeds.com RL_DBA_ROLE  WH_DBA_SM_XS DBA1 CHR12345
Executing this query: call dba1.db_users.create_user(python cr_usernsf.py youremail@deeds.com RL_DBA_ROLE  WH_DBA_SM_XS DBA1 CHRWELL_TICKET);in Snowflake Database
SQL Execution Error: 002002 (42710): Execution error in store procedure CREATE_USER:
Executed Successfully

Leave a comment