我试图用actix和diesel创建一个基本的crud应用程序,但diesel有问题。这是项目的文件夹结构:
|─ migrations
|─ src
| ├─ users
| ├─mod.rs
| ├─models.rs
|─ main.rs
|─ schema.rs
字符串
其中schema.rs由diesel通过运行迁移命令创建和管理。
以下是文件及其内容:
mod.rs
pub mod models;
pub mod routes;
pub use models::*;*
pub use routes::;
型
models.rs
use diesel::{Insertable, Queryable};
use crate::schema::users;
#[derive(Queryable)]
pub struct User {
pub id: i64,
pub email: String,
pub password_hash: String,
pub confirmed: bool,
}
#[derive(Insertable)]
#[table_name = "users"]
pub struct NewUser {
pub email: String,
pub password_hash: String,
pub confirmed: bool,
}
型
main.rs
#![allow(unused)]
#[macro_use]
extern crate diesel;
mod users;
mod schema;
use diesel::pg::PgConnection;
use diesel::prelude::*;
use diesel::query_dsl::methods::FindDsl;
use dotenv::dotenv;
use std::env;
pub fn establish_connection() -> PgConnection {
dotenv().ok();
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
PgConnection::establish(&database_url).expect(&format!("Error connecting to {}", database_url))
}
fn main() -> std::io::Result<()> {
let connection = establish_connection();
use schema::users::dsl as users_dsl;
let results = users_dsl::users.filter(users_dsl::confirmed.eq_all(true)).limit(5).load::<users::models::User>(&connection).expect("Error loading users") ;
for _user in results {
println!("user id {} with mail {}", _user.id, _user.email)
}
Ok(())
}
型
schema.rs:
table! {
users (id) {
id -> Int8,
email -> Varchar,
password_hash -> Varchar,
confirmed -> Bool,
}
}
型
问题是,当我试图从crate root导入schema到user/models.rsrustc说“unresolved import crate::schema
could not find schema
in the crate root”,但rust-analyzer建议了该模块中存在的内容(例如表,表及其列)。
有什么问题吗?
2条答案
按热度按时间qvtsj1bj1#
如diesel文档中所述,将以下内容添加到lib文件中,如果lib不存在,则在main.rs的同一级别中创建 lib.rs
字符串
只有当你把它放在lib.rs文件中时,该模块才有用。
[在此输入图像描述][1] [1]:https://i.stack.imgur.com/OidR6.png
你的项目结构应该是这样的:
型
当你想从其他文件导入一些东西时,使用
use crate::FILENAME::{function, Object}
Diesel入门文档太棒了!请看那里,你会发现所有. https://diesel.rs/guides/getting-started
esyap4oy2#
刚刚发现我必须在一个名为lib.rs的文件中导入schema模块(如果它不存在,请创建它):
网址:lib.rs
字符串
所以它可以通过
型
请注意,
macro_use
需要在lib.rs
中使用table!
宏,才能在schema.rs
中使用table!
宏而不会出错。