我正在使用库作为我的高丽项目。我试图创建一个db连接mysql。因此,我发现了这两个函数:sqlx.Connect()和sqlx.Open(),但没有发现区别。
因此,我试着阅读中的文档。我发现了这个:
sqlx.Connect()
Connect to a database and verify with a ping.
sqlx.Open()
Open is the same as sql.Open, but returns an *sqlx.DB instead.
我知道sqlx.Open()使用golang sql.Open创建到数据库的连接。但是sqlx.Connect()的用途是什
我想要完成的是在多个函数之间共享一个db.sqlx指针,除了说沿指针传递的帖子之外,这很好,但是如何在接口中这样做呢?我在任何地方都找不到任何能说明它的用途的东西。基本上,我拥有的是Datastore类型的接口。我还有mysql & pgsql实现Datastore类型。接口本身很好,但是问题是,我试图为*sqlx.DB创建一个单独的连接函数,以便在实现的接口中的所有函数之间共享。我认为问题在于,我对如何在接口的函数之间共享指针,甚至“在哪里”共享它感到困惑。主界面如下所示:
var (
storage Datastore
db * sqlx.DB
)
type Da
我想设置一个接受SQLx、或的泛型函数。
use dotenv::dotenv;
use sqlx::postgres::PgPool;
use sqlx::{Pool, Database};
use std::env;
#[derive(Debug)]
struct Todo {
id: i64,
description: String,
done: bool,
}
#[actix_web::main]
async fn main() -> anyhow::Result<()> {
dotenv().ok();
let pool
我使用的是sqlx::query!还有sqlx::query_as!我的项目编写得很好。但是,当我运行货运sqlx准备时,我得到了第一个错误:
$ cargo sqlx prepare
error: extra arguments to `rustc` can only be passed to one target, consider filtering
the package by passing, e.g., `--lib` or `--bin NAME` to specify a single target
error: `cargo check` failed with status
我试图用sqlx机箱和Postgres数据库连接到锈蚀中的数据库。
main.rs
use dotenv;
use sqlx::Pool;
use sqlx::PgPool;
use sqlx::query;
#[async_std::main]
async fn main() -> Result<(), Error> {
dotenv::dotenv().ok();
pretty_env_logger::init();
let url = std::env::var("DATABASE_URL").unwrap();
dbg
我正在尝试创建一个graphql解析器(使用异步graphql)在actix web应用程序中。我正在执行一个me查询,其中我从会话中获取用户id,并从数据库中获取用户。这是代码中最相关的部分
use async_graphql::*;
use anyhow::anyhow;
use actix_session::Session;
use async_graphql_actix_web::{Request, Response};
#[derive(Default, Debug)]
pub struct UserQuery;
struct User {
id: i32,
us
我得到了std::result::Result<Row, sqlx::Error>的结果,我想检查是否找到了行。正确的代码: let sql = "select id,name from tablename LIMIT 0";
let r = sqlx::query_as::<_, Person>(sql).fetch_one(&pool).await;
if let Err(err) = r {
match err {
sqlx::Error::RowNotFound => println!("Not F
但是,我希望能够序列化包含PgRange<DateTime<Utc>>的结构,但是,#[derive(Serialize)]对struct Reservation的错误失败:
pub timespan: PgRange<DateTime<Utc>>,
^^^ the trait `Serialize` is not implemented for `PgRange<chrono::DateTime<chrono::Utc>>`
作为一种解决方法,我将timespan字段分成两个字段,用于序列化,但使SQL更加复杂。
数据方
正如标题所示,我希望将各种SQLX类型存储在一个向量中,以便手动构建查询。这是我最好的尝试:
use sqlx::{Database, Encode, Type};
use sqlx::database::HasArguments;
use sqlx::query::QueryScalar;
pub type SqlVec<'q, DB: Database> = Vec<Box<dyn SqlTrait<'q, DB>>>;
pub trait SqlTrait<'q, DB: Database>: Sen
注意:这是一个与类似但不重复的问题。我在找。
这就是我想要做的。
let v = vec![..];
sqlx::query("SELECT something FROM table WHERE column IN (?)").bind(v)
...
然后我得到了下面的错误
the trait bound `std::vec::Vec<u64>: sqlx::Encode<'_, _>` is not satisfied
问题是当我输入这样的代码时。
let data = sqlx::query("SELECT id, name FROM test")
.fetch_all(&pool)
.await;
我得到了一个no method named `fetch_all` found for struct `sqlx_core::query::Query<'_, _>` in the current scope错误。跟随官方的。这也适用于query_as方法。我怀疑,由于某种原因,编译器没有“看到”sqlx::Query特性方法,但我不知
我正在学习如何在SQLx中使用Axum,从这个开始。这个基本的例子起作用了,但是我很难继续前进。我正在使用一个简单的数据库表,如下所示:
todo | description
--------+--------------
todo_1 | doing todo 1
todo_2 | doing todo 2
todo_3 | doing todo 3
我只是试图返回"SELECT * FROM todos",但是我得到了一个错误。我想我的Result类型的返回是错误的,但我不知道下一步该做什么。main.rs的全部内容如下所示。
//! Example of ap
我在应用程序中有一个通用特性,可以在不同的存储空间中转换结果。现在,我想添加对SQLx的支持。我想保持它通用于所有sqlx引擎。
I64的简化示例:
// My trait
pub trait TryConvert {
fn try_i64(&self) -> i64;
}
第一步尝试:
// Gives error
// the trait `sqlx::Decode<'_, DB>` is not implemented for `i64`
impl<DB, V> TryConvert for V
where
DB: Datab
我有两个Rust方法,根据两个不同的参数,从同一个SQLite表中选择使用sqlx的数据。
由于expected `i64`, found enum `std::option::Option`错误,我无法使两者都工作。
码
// src/main.rs
use tokio;
use anyhow::Result;
use sqlx::sqlite::SqlitePool;