java.jdbc clojure выполнить!вставить арити - PullRequest
0 голосов
/ 01 июня 2018

Я работаю с базой данных postgres из clojure, используя java.jdbc.

[org.clojure/clojure "1.7.0"]
[org.clojure/java.jdbc "0.6.1"]
[org.postgresql/postgresql "9.4-1201-jdbc41"]

Я хочу выполнить операцию 'upsert' над базой данных, используя некоторый код, подобный следующему:

 (if (-> updatesU count pos?) (sql/execute! spec ["insert into users(id, name) values (?, ?) on conflict(id) do update set name=EXCLUDED.name;"]  updatesU  {:multi? true} ))
 (if (-> updatesTE count pos?) (sql/execute! spec ["insert into time_entries(id, spent_date, hours, userid, project, task) values (?, ?, ?, ?, ?, ?) on conflict(id) do update set spent_date=EXCLUDED.spent_date, hours=EXCLUDED.hours;"] updatesTE {:multi? true} )))

В документации, похоже, нет примеров, поэтому я вроде как потеряндля решения.

Я получаю эту ошибку:

Exception in thread "main" clojure.lang.ArityException: Wrong number of args (4) passed to: jdbc/execute!

Любая помощь будет отличной.

1 Ответ

0 голосов
/ 02 июня 2018

Распространенным случаем является то, что параметры оператора входят в вектор как скаляры:

(sql/execute! 
  spec 
  ["insert into users(id, name) values (?, ?) on conflict(id) do update set name=EXCLUDED.name;"  id name]  
  {:multi? false} ))

{: multi?true} - это когда вы выполняете оператор несколько раз, а не один раз с несколькими параметрами, например:

(sql/execute!
  spec
  ["insert into users(id, name) values (?, ?) on conflict(id) do update set name=EXCLUDED.name;"  [id1 name1] [id2 name2] [id3 name3]]
  {:multi? true} ))

Вот некоторые дополнительные примеры:

http://clojure-doc.org/articles/ecosystem/java_jdbc/using_sql.html

В библиотеке clojure.java.jdbc в настоящее время есть отличный, активный, полезный сопровождающий, но запутанный устаревший API, предшествующий современной идиоме.Возможно, немного более интуитивный API доступен через более новую библиотеку jdbc, названную clojure.jdbc (в отличие от clojure.java.jdbc):

http://funcool.github.io/clojure.jdbc/latest/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...