Updating table schema with correct datatype in sqlite
If you want really want to, just use your first table as a staging table before you go ahead and create the final table with correct datatypes &amp; data:
sqlite&gt; PRAGMA table_info(testtb);
0|a|TEXT|0||0
1|b|TEXT|0||0
sqlite&gt; create table testtb2 (a INT, b INT);
sqlite&gt; insert into testtb2 (a,b) select a,b from testtb ;
sqlite&gt; select * from testtb2;
1|2
sqlite&gt; PRAGMA table_info(testtb2);
0|a|INT|0||0
1|b|INT|0||0
sqlite&gt; 

At the end of the day you have to remember (to some extent) that sqlite doesn't actually care about datatypes.

SQLite is very flexible with regard to datatypes.
Some commentators say that SQLite is &quot;weakly typed&quot; and that other SQL
databases are &quot;strongly typed&quot;. We consider these terms to be
inaccurate and purgative. We prefer to say that SQLite is &quot;flexibly
typed&quot; and that other SQL databases are &quot;rigidly typed&quot;.
The key point is that SQLite is very forgiving of the type of data
that you put into the database. For example, if a column has a
datatype of &quot;INTEGER&quot; and the application inserts a text string into
that column, SQLite will first try to convert the text string into an
integer, just like every other SQL database engine. Thus, if one
inserts '1234' into an INTEGER column, that value is converted into an
integer 1234 and stored. But, if you insert a non-numeric string like
'wxyz' into an INTEGER column, unlike other SQL databases, SQLite does
not throw an error. Instead, SQLite stores the actual string value in
the column.