#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
.