如何通过柴油使用i64和Insertable

问题描述

如何将i64 / u64与柴油一起使用?

我真的需要为原始类型实现diesel::Expression特性吗?

这是我的代码

Cargo.toml

[dependencies]
...
diesel = { version = "1.4.5",features = ["sqlite","numeric"] }

migration/up.sql

CREATE TABLE books (
  id INTEGER NOT NULL PRIMARY KEY,size INTEGER NOT NULL
);

schema.rs

table! {
    books (id) {
        id -> Integer,size -> Integer,}
}

来源:

use crate::schema::books;

#[derive(Insertable,Queryable)]
#[table_name="books"]
pub struct BookRecord {
    pub id: Id,pub size: i64,}

这会出现以下错误

error[E0277]: the trait bound `i64: diesel::Expression` is not satisfied
 --> src/lib/models/book.rs:4:10
  |
4 | #[derive(Insertable,Queryable)]
  |          ^^^^^^^^^^ the trait `diesel::Expression` is not implemented for `i64`
  |
  = note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Integer>` for `i64`
  = note: this error originates in a derive macro (in Nightly builds,run with -Z macro-backtrace for more info)

如何解决错误

解决方法

i64 corresponds to BigInti32 corresponds to Integer。更改架构以使用BigInt,或将数字更改为i32