У меня есть CSV-файл, в котором много строк. Я покажу первый ряд, потому что именно там начинается проблема. Поэтому моя задача - вставить данные из файла CSV в базу данных.
phone_number,start_time,session_time,client_status,operator_status,custom_status,sip and so on...
42424242, 2019-12-09 14:01:17, , CANCEL, , , , 1, 0, some name, 2222222, info, info, 242424, , 0,
Это мой ruby скрипт.
require 'csv'
require 'pg'
host = "localhost"
port = 5432
database = "testdb"
username = "XXX"
password = "XXX"
pg_conn = PG.connect(host,port,"","",database,username,password)
puts pg_conn
csv_text = File.read('/home/XXX/XXX/XXX/calls.csv')
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1', :col_sep => ',')
csv.each do |row|
pg_conn.exec("INSERT INTO testing(custom_field_2, phone_number, client_status, operator_status, start_time, sip)
VALUES (#{row['custom_field_2']},#{row['phone_number']},#{row['client_status']},#{row['operator_status']},#{row['start_time']},#{row['sip']})")
end
Когда я пытаюсь запустить скрипт, я получаю это ошибка
script.rb:24:in `exec': ERROR: syntax error at or near "," (PG::SyntaxError)
LINE 2: ... VALUES (2222222,42424242,CANCEL,,2019-12-0...
^
Итак, проблема начинается в csv.each. Я попытался удалить "статус клиента" из csv.each, и тогда это сработало.
#{row['client_status']}
, потому что в файле csv некоторые строки "client_status" пусты, и я не знаю, как заставить ruby пропустить пустое место или как-то подсчитать пустое место, но в кавычках. Возможно, когда я запускаю скрипт, можно поставить каждую строку в кавычки. На данный момент мой сценарий считает, что я хочу вставить запятую, но это просто разделитель
"42424242", "2019-12-09 14:01:17"," ", "CANCEL"," "," "," ", "1", "0", "some name", "2222222", "info", "info", "242424"," ", "0",
РЕДАКТИРОВАТЬ: проблема была не с CSV-файл или pg_conn.exec Это на самом деле мой sql функция с ошибкой Но принятый ответ также исправил мою проблему, и мне не пришлось менять свою sql функцию.