我正在尝试使用持久性查询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
网络应用,所以这里有一些特定的东西)
runDb $ runMigration migrateAll --to create the table
liftIO $ runDb $ insert $ Post $ decodeUtf8 $ toStrict image --to attempt to insert the data, this is what fails
以下是我对这些功能的定义:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase|
Post
content Text
|]
runDb :: SqlPersist (ResourceT IO) a -> IO a
runDb query = runResourceT . withSqliteConn ":memory:" . runSqlConn $ query
它似乎声称要创建表但实际上并没有这样做。
答案 0 :(得分:2)
您正在内存中创建表,因此,每次运行runDb
后,数据都会被丢弃。
有两种可能的解决方案:
使用文件存储数据(即 - 将“:memory:”更改为“filename.sqlite3”)。数据将在运行中持续运行。
运行代码以在单个runDb
中创建和填充数据。代码将起作用,但数据将在运行中丢失。