遵循“入门”柴油教程,但使用 sqlite,原因

Posted

技术标签:

【中文标题】遵循“入门”柴油教程,但使用 sqlite,原因【英文标题】:Following "getting started" diesel tutorial, but with sqlite, causes 【发布时间】:2021-08-21 05:56:51 【问题描述】:

我正在尝试关注:https://diesel.rs/guides/getting-started 但我正在使用:

echo DATABASE_URL=/tmp/diesel_demo.sqlite > .env

而不是 Postgres 数据库。

我已将所有出现的Pg 更改为Sqlite,并将SERIAL 更改为INT,但出现以下错误:

error[E0277]: the trait bound `i32: FromSql<diesel::sql_types::Nullable<diesel::sql_types::Integer>, Sqlite>` is not satisfied
  --> src/bin/show_posts.rs:14:10
   |
14 |         .load::<Post>(&connection)
   |          ^^^^ the trait `FromSql<diesel::sql_types::Nullable<diesel::sql_types::Integer>, Sqlite>` is not implemented for `i32`    
How to get a result set where field value == row number?

show_posts.rs:

extern crate diesel_demo;
extern crate diesel;

use self::diesel_demo::*;
use self::models::*;
use self::diesel::prelude::*;

fn main() 
    use diesel_demo::schema::posts::dsl::*;

    let connection = establish_connection();
    let results = posts.filter(published.eq(true))
        .limit(5)
        .load::<Post>(&connection)
        .expect("Error loading posts");

    println!("Displaying  posts", results.len());
    for post in results 
        println!("", post.title);
        println!("----------\n");
        println!("", post.body);
    

up.sql:

CREATE TABLE posts (
  id INTEGER PRIMARY KEY,
  title VARCHAR NOT NULL,
  body TEXT NOT NULL,
  published BOOLEAN NOT NULL DEFAULT 'f'
)

models.rs(自动生成):

#[derive(Queryable)]
pub struct Post 
    pub id: i32,
    pub title: String,
    pub body: String,
    pub published: bool,

我不明白为什么 Diesel 期望 idNullable

【问题讨论】:

Diesel 期望 idNullable&lt;Integer&gt;,因为 sqlite 确实通过 PRAGMA TABLE_INFO('…') 表明该列可以为空。您可以在 schema.rs 文件中查看推断的类型。 【参考方案1】:

NOT NULL 添加到up.sql 中的id 字段修复了它。

【讨论】:

以上是关于遵循“入门”柴油教程,但使用 sqlite,原因的主要内容,如果未能解决你的问题,请参考以下文章

如何使用锈柴油创建新数据库?

柴油需要安装mysql和sqlite吗?

学习啦!SQLite快速入门教程

SQLite基础入门教程

重型柴油车SAE J1939总线数据结构分析及应用

重型柴油车SAE J1939总线数据结构分析及应用