生 rust /柴油问题查询

rn0zuynd  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(193)

我对Diesel相当陌生,想把它添加到一个Rocket项目中。我学习了教程,然后决定自己创建表和查询。
所以问题是:当我尝试使用查询构建器执行类似SELECT * FROM ... WHERE id = ?这样的简单请求时,我遇到了无法理解的编译时错误。
错误如下:

error[E0277]: the trait bound `(i32, std::string::String, std::string::String): FromStaticSqlRow<(diesel::sql_types::Nullable<diesel::sql_types::Integer>, diesel::sql_types::Text, diesel::sql_types::Text), Sqlite>` is not satisfied
    --> src/dbal/quote_subject.rs:26:12
     |
26   |     .first(db)
     |      ----- ^^ the trait `FromStaticSqlRow<(diesel::sql_types::Nullable<diesel::sql_types::Integer>, diesel::sql_types::Text, diesel::sql_types::Text), Sqlite>` is not implemented for `(i32, std::string::String, std::string::String)`
     |      |
     |      required by a bound introduced by this call
     |
     = help: the following other types implement trait `FromStaticSqlRow<ST, DB>`:
               <(T0,) as FromStaticSqlRow<(ST0,), __DB>>
               <(T1, T0) as FromStaticSqlRow<(ST1, ST0), __DB>>
               <(T1, T2, T0) as FromStaticSqlRow<(ST1, ST2, ST0), __DB>>
               <(T1, T2, T3, T0) as FromStaticSqlRow<(ST1, ST2, ST3, ST0), __DB>>
               <(T1, T2, T3, T4, T0) as FromStaticSqlRow<(ST1, ST2, ST3, ST4, ST0), __DB>>
               <(T1, T2, T3, T4, T5, T0) as FromStaticSqlRow<(ST1, ST2, ST3, ST4, ST5, ST0), __DB>>
               <(T1, T2, T3, T4, T5, T6, T0) as FromStaticSqlRow<(ST1, ST2, ST3, ST4, ST5, ST6, ST0), __DB>>
               <(T1, T2, T3, T4, T5, T6, T7, T0) as FromStaticSqlRow<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST0), __DB>>
             and 24 others
note: required for `QuoteSubject` to implement `diesel::Queryable<(diesel::sql_types::Nullable<diesel::sql_types::Integer>, diesel::sql_types::Text, diesel::sql_types::Text), Sqlite>`
    --> src/models.rs:5:24
     |
5    | #[derive(Identifiable, Queryable, Serialize, Deserialize, Debug, Clone)]
     |                        ^^^^^^^^^
6    | #[diesel(table_name = quote_subject)]
7    | pub struct QuoteSubject {
     |            ^^^^^^^^^^^^
     = note: required for `QuoteSubject` to implement `FromSqlRow<(diesel::sql_types::Nullable<diesel::sql_types::Integer>, diesel::sql_types::Text, diesel::sql_types::Text), Sqlite>`
     = note: required for `(diesel::sql_types::Nullable<diesel::sql_types::Integer>, diesel::sql_types::Text, diesel::sql_types::Text)` to implement `load_dsl::private::CompatibleType<QuoteSubject, Sqlite>`
     = note: required for `SelectStatement<FromClause<schema::quote_subject::table>, diesel::query_builder::select_clause::DefaultSelectClause<FromClause<schema::quote_subject::table>>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<expression::grouped::Grouped<expression::operators::Eq<schema::quote_subject::columns::id, _>>>, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::limit_offset_clause::LimitOffsetClause<diesel::query_builder::limit_clause::LimitClause<expression::bound::Bound<BigInt, i64>>, diesel::query_builder::offset_clause::NoOffsetClause>>` to implement `LoadQuery<'_, diesel::SqliteConnection, QuoteSubject>`
note: required by a bound in `first`
    --> /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/diesel-2.0.2/src/query_dsl/mod.rs:1736:22
     |
1736 |         Limit<Self>: LoadQuery<'query, Conn, U>,
     |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `first`
     = note: this error originates in the derive macro `Queryable` (in Nightly builds, run with -Z macro-backtrace for more info)

For more information about this error, try `rustc --explain E0277`.
error: could not compile `le-saviez-vous` due to previous error

仅供参考,我在此项目中使用SQLite。
下面是我的代码:
第一个
有什么解决办法吗?
尝试了各种搜索和一些代码替换后,git问题,但无法使其工作。

aiqt4smr

aiqt4smr1#

我将简化错误消息:

the trait bound `(i32, String, String): FromStaticSqlRow<(Nullable<Integer>, Text, Text), Sqlite>` is not satisfied

你现在能认出它吗?这将尝试从Nullable<Integer>构造一个i32,但这是不可能的,因为值可能是NULL
现在,它不会是NULL,因为您有INTEGER PRIMARY KEY,即impliesNOT NULL,但schema.rs仍然有id列标记为Nullable
请更改您的架构以声明id -> Integer

相关问题