Sqlite Haskell-尝试查询刚创建的表时出现持续错误
我试图使用persistent查询一个sqlite表,但收到一条消息说该表不存在,就在消息说它是创建的之后Sqlite Haskell-尝试查询刚创建的表时出现持续错误,sqlite,haskell,Sqlite,Haskell,我试图使用persistent查询一个sqlite表,但收到一条消息说该表不存在,就在消息说它是创建的之后 Migrating: CREATE TABLE "Post"("id" INTEGER PRIMARY KEY,"content" VARCHAR NOT NULL) user error (SQLite3 returned ErrorError while attempting to perform prepare "SELECT \"content\" FROM \"Post\" WH
Migrating: CREATE TABLE "Post"("id" INTEGER PRIMARY KEY,"content" VARCHAR NOT NULL)
user error (SQLite3 returned ErrorError while attempting to perform prepare "SELECT \"content\" FROM \"Post\" WHERE \"id\"=?": no such table: Post)
这是我正在运行的代码(这是一个scotty
web应用程序,所以这里有一些特定于scotty的东西)
以下是我对这些函数的定义:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase|
Post
content Text
|]
runDb :: SqlPersist (ResourceT IO) a -> IO a
runDb query = runResourceT . withSqliteConn ":memory:" . runSqlConn $ query
它似乎声称要创建表,但实际上并没有这样做。您正在内存中创建表,因此,每次运行
runDb
后,数据都会被丢弃
有两种可能的解决方案:
runDb
中创建和填充数据。代码可以工作,但数据会在每次运行中丢失谢谢,我没有意识到这是在一个:内存:数据库中发生的事情。我以为它会一直持续下去,直到我结束了这个过程。
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase|
Post
content Text
|]
runDb :: SqlPersist (ResourceT IO) a -> IO a
runDb query = runResourceT . withSqliteConn ":memory:" . runSqlConn $ query