# /// script # requires-python = ">=3.14" # dependencies = [ # "pymysql==1.1.1", # ] # /// import pymysql import argparse def create_rds_user_and_database(args: argparse.Namespace) -> None: connection = pymysql.connect( host=args.host, port=int(args.port), user=args.admin_user, password=args.admin_pass, cursorclass=pymysql.cursors.DictCursor, ) try: with connection.cursor() as cursor: # Create database if it doesn't exist cursor.execute(f"CREATE DATABASE IF NOT EXISTS `{args.db_name}`") # Create user if it doesn't exist (escape literal % with '%%') cursor.execute( "CREATE USER IF NOT EXISTS %s@'%%' IDENTIFIED BY %s", (args.db_user, args.db_pass) ) # Grant all privileges on the database to the user (escape literal % with '%%') cursor.execute( "GRANT ALL PRIVILEGES ON `{}`.* TO %s@'%%'".format(args.db_name), (args.db_user,) ) # Flush privileges to ensure that they are saved and available cursor.execute("FLUSH PRIVILEGES") connection.commit() print(f"successfully created database '{args.db_name}' and user '{args.db_user}'") finally: connection.close() if __name__ == "__main__": parser = argparse.ArgumentParser( description="Create RDS user and database if not exist" ) parser.add_argument("--host", required=True, help="RDS endpoint") parser.add_argument("--port", required=True, help="RDS port") parser.add_argument("--admin-user", required=True, help="RDS admin username") parser.add_argument("--admin-pass", required=True, help="RDS admin password") parser.add_argument("--db-name", required=True, help="Database name to create") parser.add_argument("--db-user", required=True, help="Database username to create") parser.add_argument("--db-pass", required=True, help="Database user password") args = parser.parse_args() create_rds_user_and_database(args)