Sqlite Haskell-尝试查询刚创建的表时出现持续错误

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

我试图使用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\" 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
后,数据都会被丢弃

有两种可能的解决方案:

  • 使用一个文件来存储数据(即将“:memory:”更改为“filename.sqlite3”)。数据也将从一个运行持续到另一个运行

  • 运行代码以在单个
    runDb
    中创建和填充数据。代码可以工作,但数据会在每次运行中丢失


  • 谢谢,我没有意识到这是在一个:内存:数据库中发生的事情。我以为它会一直持续下去,直到我结束了这个过程。
    share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase|
    Post
        content Text
    |]
    
    runDb :: SqlPersist (ResourceT IO) a -> IO a
    runDb query = runResourceT . withSqliteConn ":memory:" . runSqlConn $ query