From 2d6a14938a9d9d45254adaf38ee4fa1be950d401 Mon Sep 17 00:00:00 2001 From: Jacob Chapman <7908073+chapmanjacobd@users.noreply.github.com> Date: Mon, 31 Oct 2022 17:11:35 -0500 Subject: [PATCH] Allow surrogates in parameters closes #507 https://dwheeler.com/essays/fixing-unix-linux-filenames.html --- sqlite_utils/db.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index a06f4b7..fe5d84f 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -477,12 +477,18 @@ class Database: :param parameters: Parameters to use in that query - an iterable for ``where id = ?`` parameters, or a dictionary for ``where id = :id`` """ - if self._tracer: - self._tracer(sql, parameters) - if parameters is not None: - return self.conn.execute(sql, parameters) - else: - return self.conn.execute(sql) + try: + if self._tracer: + self._tracer(sql, parameters) + if parameters is not None: + return self.conn.execute(sql, parameters) + else: + return self.conn.execute(sql) + except UnicodeEncodeError: + sql = sql.encode('utf-8', 'surrogatepass').decode('utf-8') + if parameters is not None: + parameters = parameters.encode('utf-8', 'surrogatepass').decode('utf-8') + return self.execute(sql, parameters) def executescript(self, sql: str) -> sqlite3.Cursor: """