korma / Korma

Tasty SQL for Clojure.
http://sqlkorma.com
1.48k stars 222 forks source link

Unable to insert simple data #367

Closed jkaye2012 closed 7 years ago

jkaye2012 commented 7 years ago

Hey all,

I assume I'm just doing something incorrectly here, but I can't seem to get even a simple insert to work. I have experience with Postgres but this is my first foray into Korma. I've verified that simple inserts/selects on this database are working as expected.

Running the following:

ardently.core=> (kdb/defdb adb (kdb/postgres {:user "jkaye" :db "ardently"}))
ardently.core=> (require '[korma.core :as k])
ardently.core=> (k/defentity external-site (k/table :external_site))
ardently.core=> (k/insert external-site (k/values {:name "Twitch"}))

Gives me this error:

Failure to execute query with SQL:
INSERT INTO "external_site" ("name") VALUES (?)  ::  [Twitch]
PSQLException:
 Message: ERROR: syntax error at or near "Twitch"
  Position: 1
 SQLState: 42601
 Error Code: 0

And the dry run:

ardently.core=> (k/dry-run (k/insert external-site (k/values {:name "Twitch"})))
dry run :: INSERT INTO "external_site" ("name") VALUES (?) :: [Twitch]
[{:id 1}]

Thanks for you help!

immoh commented 7 years ago

I cannot reproduce this:

$ lein try korma "0.4.3" org.postgresql/postgresql "9.4.1210"
nREPL server started on port 53104 on host 127.0.0.1 - nrepl://127.0.0.1:53104
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.8.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_91-b14
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> (use 'korma.db 'korma.core)
WARNING: update already refers to: #'clojure.core/update in namespace: user, being replaced by: #'korma.core/update
nil
user=> (defdb db (postgres {:host "docker" :db "postgres" :user "postgres" :password "postgres"}))
{:pool #object[clojure.lang.Delay 0x571dfd63 {:status :pending, :val nil}], :options {:naming {:keys #object[clojure.core$identity 0x49a13211 "clojure.core$identity@49a13211"], :fields #object[clojure.core$identity 0x49a13211 "clojure.core$identity@49a13211"]}, :delimiters ["\"" "\""], :alias-delimiter " AS ", :subprotocol "postgresql"}}
user=> (exec-raw "create table external_site (name text)")
Sep 23, 2016 11:12:46 AM com.mchange.v2.log.MLog
INFO: MLog clients using java 1.4+ standard logging.
Sep 23, 2016 11:12:46 AM com.mchange.v2.c3p0.C3P0Registry
INFO: Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
Sep 23, 2016 11:12:46 AM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1hge78r9jnw2fzl16dfxkf|1c5d9914, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.postgresql.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1hge78r9jnw2fzl16dfxkf|1c5d9914, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:postgresql://docker:5432/postgres, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 10800, maxIdleTimeExcessConnections -> 1800, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
[0]
user=> (defentity external-site (table :external_site))
#'user/external-site
user=> (insert external-site (values {:name "Twitch"}))
{:name "Twitch"}
user=> (select external-site)
({:name "Twitch"})
jkaye2012 commented 7 years ago

Must've had something to do with the jdbc driver I was using. I had specified postgres/postgres instead of org.postgres/postgres. Using the version specified has everything working properly. Thanks!