import cmd import sqlite3 from textwrap import dedent import sys class SqliteShell(cmd.Cmd): intro = dedent(f''' SQLite version {sqlite3.version} Enter "help" for usage hints ''') prompt = 'sqlite> ' def __init__(self, filename=None): super().__init__() self.filename = filename self.conn = filename and sqlite3.connect(filename) def do_open(self, filename): 'Connnect to a database using the given filename' self.conn = sqlite3.connect(filename) def do_select(self, statement): 'Run a SQL SELECT statement' try: for row in self.conn.execute(f'SELECT {statement}'): print(row) except AttributeError: print('Need to open a database before running SELECT', file=sys.stderr) except sqlite3.OperationalError as e: print('sqlite OperationalError:', *e.args, file=sys.stderr) def do_quit(self, arg): 'Exit the shell' return True if __name__ == '__main__': SqliteShell().cmdloop()