Как использовать i64 с возможностью вставки с помощью Diesel

#sqlite #rust #rust-diesel

#sqlite #Ржавчина #rust-дизель

Вопрос:

Как мне использовать i64 / u64 с Diesel?

Действительно ли мне нужно реализовать 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)
  

Как мне устранить эту ошибку?

Ответ №1:

<a rel="noreferrer noopener nofollow" href="https://docs.rs/diesel/1.4.5/diesel/deserialize/trait.FromSql.html#impl-FromSql-for-i64″ rel=»noreferrer»> i64 соответствует BigInt и <a rel="noreferrer noopener nofollow" href="https://docs.rs/diesel/1.4.5/diesel/deserialize/trait.FromSql.html#impl-FromSql-for-i32″ rel=»noreferrer»> i32 соответствует Integer . Либо измените свою схему на use BigInt , либо измените свои номера на i32 .