I think your SQL is syntactically not corret: If insert is done from result set given by select you must not use values part. Also, if you want to insert two values you must also select two values in each row. So try this:
INSERT INTO table1 (subid, paid)
SELECT subid, paid FROM def_1 WHERE id IN (SELECT id FROM def_2)
If you're in one of those predicaments where cls.__private attributes just aren't enough since they can easily be accessed through inst._cls__private, and you need something a little more secure, here's ...