Racket 如何连接打字拍子中的db?
据介绍,通过网络连接postgresql非常方便Racket 如何连接打字拍子中的db?,racket,typed-racket,Racket,Typed Racket,据介绍,通过网络连接postgresql非常方便 (require db) (define pgc (postgresql-connect #:user "example" #:database "exampledb" #:password "password")) 但是,这在键入的Racket中不起作用(我有(需要键入/db)): postgresql connect:中的模块中的未绑定标识符: po
(require db)
(define pgc
(postgresql-connect #:user "example"
#:database "exampledb"
#:password "password"))
但是,这在键入的Racket中不起作用(我有(需要键入/db)
):
postgresql connect:中的模块中的未绑定标识符:
postgresql连接
对。。。事实证明,typed/db只用于sqlite3。下面是一些适合我的代码的示例:
#lang typed/racket
(require/typed
db
[#:opaque Connection connection?]
[postgresql-connect
(#:port Number #:user String #:database String #:password String
-> Connection)]
[query-rows
(Connection String Any * -> (Listof (Vectorof Any)))]
[query-list
(Connection String Any * -> (Listof Any))])
(define conn
(postgresql-connect #:port 13432
#:user db-username
#:database "scheduling"
#:password db-password))
(define rows
(query-rows
conn
(~a "SELECT * FROM course_mappings")))
注意,我只为我想要使用的函数提供了类型。要使用,例如,
queryexec
,您需要为此提供一个单独的类型。谢谢,我似乎应该将查询值
作为(连接字符串Any*->Any)
,因为在某些情况下我必须查询一些字符串
,而在某些情况下我必须查询一些整数
。但是如果我以Any
的形式提供它,我必须进行它的每个函数调用,类型为Any
。例如,(:getadd(->Integer Any))
。实际上,我希望这个函数返回字符串
。我不完全清楚您是希望更改查询值的输入参数还是输出参数。如果是输出,那么肯定需要一个cast;TR无法保证从数据库返回的值在没有运行时检查的情况下是所需的类型。要将值v
转换为字符串,只需使用(转换为v字符串)
。这将执行运行时检查,结果表达式的类型为String
。