0

I'm trying to run the command

zappa manage staging 'run_sql --sql \"show databases\"'

But I get the following error:

zappa manage staging 'run_sql --sql "show databases"'
[START] RequestId: dd895134-dc62-41c3-987b-3ea550af1129 Version: $LATEST
[DEBUG] 2019-03-02T10:51:18.213Z dd895134-dc62-41c3-987b-3ea550af1129 Zappa Event: {'manage': 'run_sql --sql show databases'}
Error: unrecognized arguments: databases: CommandError
Traceback (most recent call last):
  File "/var/task/handler.py", line 580, in lambda_handler
    return LambdaHandler.lambda_handler(event, context)
  File "/var/task/handler.py", line 248, in lambda_handler
    return handler.handler(event, context)
  File "/var/task/handler.py", line 413, in handler
    management.call_command(*event['manage'].split(' '))
  File "/var/task/django/core/management/__init__.py", line 127, in call_command
    defaults = parser.parse_args(args=parse_args)
  File "/var/task/django/core/management/base.py", line 55, in parse_args
    return super().parse_args(args, namespace)
  File "/var/lang/lib/python3.6/argparse.py", line 1737, in parse_args
    self.error(msg % ' '.join(argv))
  File "/var/task/django/core/management/base.py", line 61, in error
    raise CommandError("Error: %s" % message)
django.core.management.base.CommandError: Error: unrecognized arguments: databases

I tried various things like

zappa manage staging 'run_sql --sql \"show databases\"'
zappa manage staging 'run_sql --sql \\\"show databases\\\"'
zappa manage staging 'run_sql --sql \"show\ databases\"'
zappa manage staging 'run_sql --sql \\\"show\\\ databases\\\"'

But all fail for the same reason:

django.core.management.base.CommandError: Error: unrecognized arguments: databases\\”

It looks like Django command parser believes the phrase are several options or something, but I can't figure out the way to treat it as a single argument.

Based on the following Django Command:

import MySQLdb as db
from django.conf import settings
from django.core.management.base import BaseCommand


class Command(BaseCommand):
  help = "Runs a raw SQL query"

  def add_arguments(self, parser):
    parser.add_argument(
      '--user',
      dest='user',
      help='Username to be used to create database',
    )
    parser.add_argument(
      '--password',
      dest='password',
      help='Password for the mysql user.',
    )
    parser.add_argument(
      '--db-name',
      dest='db_name',
      help='Name of the database if it is different from the one defined in settings',
    )
    parser.add_argument(
      '--sql',
      dest='sql',
      help='SQL query to run',
      default='show databases'
    )

  def handle(self, *args, **options):
    self.stdout.write(self.style.SUCCESS('Running raw SQL query'))

    sql = options.get('sql')
    dbname = options.get('db_name') or settings.DATABASES['default']['NAME']
    user = options.get('user') or settings.DATABASES['default']['USER']
    password = options.get('password') or settings.DATABASES['default']['PASSWORD']
    host = settings.DATABASES['default']['HOST']

    self.stdout.write(self.style.SUCCESS(
      'Running SQL query\n'
      '"{sql}"\n'
      'with \n'
      'dbname="{dbname}"\n'
      'user="{user}"\n'
      'password="{password}"\n'
      'host="{host}"\n'
      ''.format(
        sql=sql,
        dbname=dbname,
        user=user,
        password=password,
        host=host,
      )
    ))

    con = db.connect(user=user, host=host, password=password)
    cur = con.cursor()
    cur.execute(f'{sql}'.format(sql=sql))

    output = cur.fetchall()
    self.stdout.write(self.style.SUCCESS(
      "\nSQL query output:\n"
      "{output}".format(output=output))
    )
    self.stdout.write(self.style.SUCCESS('\n'))

    cur.close()
    con.close()

    self.stdout.write(self.style.SUCCESS('All Done'))
2
  • What about zappa manage staging 'run_sql --sql "show databases"' Commented Mar 3, 2019 at 16:28
  • I tried it first, same error: django.core.management.base.CommandError: Error: unrecognized arguments: databases" Commented Mar 3, 2019 at 22:02

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.