Fix so text columns containing numbers are downloaded as text
authorKarl O. Pinc <kop@karlpinc.com>
Sun, 29 Sep 2024 21:43:35 +0000 (16:43 -0500)
committerKarl O. Pinc <kop@karlpinc.com>
Sun, 29 Sep 2024 21:43:35 +0000 (16:43 -0500)
src/pgwui_sql/views/sql.py

index afc0d9b0b12edfe59dcee1cb40a95fdf2a09eed5..b3acd11138efbf829a3b94ca65e94c71fc227f92 100644 (file)
@@ -26,6 +26,7 @@ import logging
 import markupsafe
 import psycopg.errors
 import pyramid.response
+import sys
 import tempfile
 import wtforms.fields
 
@@ -268,11 +269,19 @@ class SQLResultsHandler(pgwui_core.core.SessionDBHandler):
             return sql
         return f'SET search_path TO {self.search_path};\n{sql}'
 
+    def make_csv_writer(self):
+        vinfo = sys.version_info
+        if vinfo.major >= 3 and vinfo.minor >= 12:
+            quoting = csv.QUOTE_STRINGS
+        else:
+            quoting = csv.QUOTE_NONNUMERIC
+        return csv.writer(self.tfile, quoting=quoting)
+
     def make_download(self, sql_results):
         downloading = self.uf['download']
         if downloading:
             self.tfile = tempfile.TemporaryFile(mode='w+t', newline='')
-            writer = csv.writer(self.tfile)
+            writer = self.make_csv_writer()
             for sql_result in sql_results:
                 writer.writerow((sql_result.statusmessage.data,))
                 writer.writerow(sql_result.heading.data)