По первому вопросу, что-то вроде этого, если я правильно понимаю ваш вопрос
mytable.__table__.select(mytable.value.in_(values)
Что касается второго вопроса, то запрашивать его по 1 строке за раз действительно слишком дорого, хотя у вас может не быть выбора в этом вопросе. Насколько я знаю, в SQLAlchemy нет поддержки выбора кортежей, поэтому, если существует несколько переменных (например, полиморфных ключей), SQLAlchemy не сможет вам помочь.
В любом случае, если вы выберете все подходящие строки и вставите разницу, все должно быть сделано :)
Примерно так должно работать:
results = self.conn.execute(mytable.__table__.select(mytable.value.in_(values))
available_values = set(row.value for row in results)
to_insert = set(values) - available_values