Правильный ответ:
p.communicate(b"insert into egg values ('egg');");
Обратите внимание на начальную букву b, говорящую, что это строка байтов, а не строка символов Юникода. Кроме того, если вы читаете это из файла:
value = open('thefile', 'rt').read()
p.communicate(value);
Изменение это на:
value = open('thefile', 'rb').read()
p.communicate(value);
Снова отметьте «b».
Теперь, если ваш value
является строкой, которую вы получаете от API, который возвращает только строки независимо от того, что , тогда вам необходимо его кодировать.
p.communicate(value.encode('latin-1');
Latin-1, потому что в отличие от ASCII он поддерживает все 256 байтов. Но, тем не менее, наличие двоичных данных в Unicode вызывает проблемы. Лучше, если вы сможете сделать это двоичным с самого начала.