Python SQLite3 horizontal partitioning by string column
This can be achieved as follows according to the official SQLite documentation.

For the bye table you could use the following:

CREATE TABLE bye AS 
SELECT a, 
       b,
       c,
       d,
FROM all_entries
WHERE a = 'bye'


...and for the hi table:

CREATE TABLE bye AS 
SELECT a, 
       b,
       c,
       d,
FROM all_entries
WHERE a = 'hi'


Reference: CREATE TABLE (SQL As Understood By SQLite)

If this is just a temporary solution for something you wish to achieve then add the TEMPORARY keyword:

CREATE TEMPORARY TABLE bye AS...


There are some limitations with this approach which are described in the referenced article.  


  A table created using CREATE TABLE AS has no PRIMARY KEY and no constraints of any kind. The default value of each column is NULL. The default collation sequence for each column of the new table is BINARY.
  
  Tables created using CREATE TABLE AS are initially populated with the rows of data returned by the SELECT statement. Rows are assigned contiguously ascending rowid values, starting with 1, in the order that they are returned by the SELECT statement.


And you would possibly have to post a question on Stack Overflow for a Python solution.