Add runsql command, mostly for dev use

at least for now?  kind of in a rush at the moment
This commit is contained in:
Lance Edgar 2018-05-23 20:35:32 -05:00
parent ddca6b7d9b
commit 41da3e6ae8
2 changed files with 40 additions and 0 deletions
rattail/commands
setup.py

View file

@ -39,6 +39,7 @@ import logging
from getpass import getpass
import six
import sqlalchemy as sa
from sqlalchemy import orm
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
@ -1014,6 +1015,43 @@ class PalmCommand(Subcommand):
sys.stderr.write("{}\n".format(error))
class RunSQL(Subcommand):
"""
Run (first statement of) a SQL script against a database
"""
name = 'runsql'
description = __doc__.strip()
def add_parser_args(self, parser):
parser.add_argument('engine',
help="SQLAlchemy engine URL for the database.")
parser.add_argument('script', type=argparse.FileType('r'),
help="Path to file which contains a SQL script.")
parser.add_argument('--max-width', type=int, default=80,
help="Max table width when displaying results.")
def run(self, args):
import texttable
sql = []
for line in args.script:
line = line.strip()
if line and not line.startswith('--'):
sql.append(line)
if line.endswith(';'):
break
sql = ' '.join(sql)
engine = sa.create_engine(args.engine)
result = engine.execute(sql)
rows = result.fetchall()
if rows:
table = texttable.Texttable(max_width=args.max_width)
table.add_rows([rows[0].keys()] + rows)
self.stdout.write("{}\n".format(table.draw()))
class Upgrade(Subcommand):
"""
Upgrade the local Rattail app

View file

@ -68,6 +68,7 @@ requires = [
'openpyxl', # 2.5.0
'progress', # 1.3
'six', # 1.10.0
'texttable', # 1.2.1
'xlrd', # 1.1.0
# TODO: Remove this / make it optional / etc.
@ -206,6 +207,7 @@ make-appdir = rattail.commands.core:MakeAppDir
make-config = rattail.commands.core:MakeConfig
make-user = rattail.commands.core:MakeUser
make-uuid = rattail.commands.core:MakeUUID
runsql = rattail.commands.core:RunSQL
upgrade = rattail.commands.core:Upgrade
[rattail_dev.commands]