Как мне преобразовать возвращенные карты в json csv в результатах HugSQL - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь использовать HugSQL, чтобы выбрать некоторые записи из моей БД, и я возвращаю записи У меня есть несколько проблем, когда я пытаюсь этот код:

f/attempt-all [_ (println  "Getting DB records")
                    db-records (oracle-db/get-records my-db)
;hangs here when there are large(100,000k+) records

и

-- :name get-records
select /*+ index(src_ski_sysevents_au SRC_SKI_SYSEVENTS_AU_IDX_A)*/ * from src_ski_sysevents_au where week_id='201903' AND ROWNUM <'10000'

Фактические результаты: db-records имеет список карт (карта для каждой возвращенной записи), например:

({:remarks nil, :timeprocessing 1994-01-01 00:00:00.000, :devicetype 3M, :staffcode 0M, 
           :timedeletion 1994-01-01 00:00:00.000, :occurred 1M, :syseventdesig Ticket jam, :time 2019-01-14 10:47:37.350, :syseventno 27M, 
  :devicedesig P4 LH Exit Wilga ST - 49, :devicenoprocessing 0M, :component nil, :lotabbr P3P4, :deviceabbr P4 LEX WIL, 
  :week_id 201903M, :lotdesig P3, P4 Levels, :dss_update_time #inst "2019-01-14T15:48:46.000000000-00:00", :loaded_new_yn N, 
  :operatorfirstname nil, :quantity 1M, :systemeventregno 7365M, :pdi_batch_id 697410M, :lotno 1M, :deviceno 49M, :deleted_yn N, 
  :centre_no 0012000, :lot_no 0012001, :operatorsurname unattended, :operatornoprocessing 0M}
  ...
)

Я хочу знать, как преобразовать этот список карт в строковый файл Json или CSV-файл, чтобы отправить его в мою конечную точку. При обработке нестроковых значений, таких как

: обработка времени 1994-01-01 00: 00: 00.000

Я вижу ошибки для них, как только я вставляю эту тестовую строку для проверки в (comment (def testmap {input_test_Data})) с неверным числовым форматом, и я также обнаружил, что

: dss_update_time в моей БД - "15 / JAN / 19"

но в результатах HugSQL я получаю что-то вроде этого

: dss_update_time #inst "2019-01-14T15: 48: 46.000000000-00: 00"

По сути, как я могу гарантировать, что я верну все данные Был бы очень признателен за помощь по второй части моей проблемы, по крайней мере. Спасибо

1 Ответ

0 голосов
/ 04 апреля 2019

Пожалуйста, используйте функцию prn вместо println, чтобы распечатать строку данных образца.Затем вы увидите, что значения даты на самом деле являются строками (prn не будет убирать символы двойных кавычек, как это делает println).

В этот момент вы можете просто использовать обычный EDN-> JSONпреобразование.В есть простая функция *1009* в библиотеке Tupelo :

(t/edn->json  {:a 1  :b 2})
;=> {"a":1,"b":2}

, которая просто использует библиотеку Cheshire под обложками и автоматически выполняет преобразование строки с помощью ключевого слова <->.

...