标签: rusqlite

Rusqlite 插入多行

如何使用 rusqlite 在单个查询中插入多行?看看下面的语法,我认为它失败了,因为查询期望 Vec 中只有一个值。

可以使用任何类型的辅助函数来完成吗?还是我必须完整创建查询?

    let mut names = Vec::new();
    names.push("Mittens");
    names.push("Jingle Paws");
    names.push("Sir Fluffy");
    match conn.execute(
        "INSERT INTO cats (name) VALUES (?1)",
        names,
    ) {
        Ok(_t) => (),
        Err(e) => {
            let gil = Python::acquire_gil();
            let py = gil.python();
            let error_message = format!("Error inserting cats into database! {}", e.to_string());
            PyIOError::new_err(error_message).restore(py);
            return Err(PyErr::fetch(py));
        }
    };
Run Code Online (Sandbox Code Playgroud)

OSError: Error inserting cats into database! Wrong number of parameters passed to query. Got 2, needed 1
Run Code Online (Sandbox Code Playgroud)

rust rusqlite

7
推荐指数
1
解决办法
2172
查看次数

我们如何在 rusqlite 中使用带有外部 WHERE 参数的 SELECT 查询?

我需要使用 SELECT 和 WHERE 从数据库中获取一行,我需要根据年龄获取一行,我使用其他一些教程尝试了这种方式。

use rusqlite::{params, Connection, Result};

#[derive(Debug)]
struct Person {
    id: i32,
    name: String,
    age: u8,
    data: String,
}

fn main() -> Result<()> {
    let conn = Connection::open_in_memory()?;

    conn.execute(
        "CREATE TABLE person (
                  id              INTEGER PRIMARY KEY,
                  name            TEXT NOT NULL,
                  age           INTEGER,
                  data            TEXT
                  )",
        [],
    )?;
    let me = Person {
        id: 0,
        name: "Steven".to_string(),
        age:1,
        data: "data1".to_string(),
    };
    conn.execute(
        "INSERT INTO person (name, age, data) VALUES (?1, ?2, ?3)",
        params![me.name, me.age, me.data],
    )?;

    conn.execute( …
Run Code Online (Sandbox Code Playgroud)

rust rusqlite

7
推荐指数
1
解决办法
3680
查看次数

如何通过 rusqlite 从多线程使用 SQLite?

有很多文章解释了 SQLite 的多线程访问问题,但我找不到任何简单的解决方案。如何从多个线程同时工作的 Web 服务器访问 SQLite?

来源(仍然没有解释任何简单的解决方法):

sqlite rust r2d2 rusqlite

6
推荐指数
1
解决办法
3151
查看次数

如何使用 rusqlite 在 sqlite 数据库中插入和获取日期?

我有一个带有 NaiveDate 字段的结构,我想将此字段插入到表中。这是我的全部代码

use chrono::naive::NaiveDate; 
use rusqlite::{params, Connection, Result};

#[derive(Debug)]
struct Person {
    id: i32,
    name: String,
    date: NaiveDate,
}

fn main()->Result<()>{
    let date_str = "2020-04-12";
    let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();

    let me = Person {
        id: 0,
        name: "Steven".to_string(),
        date: naive_date,
    };
    println!("{:?}",me);
    
    let conn = Connection::open_in_memory()?;
    
        
    conn.execute(
        "CREATE TABLE person (
                  id              INTEGER PRIMARY KEY,
                  name            TEXT NOT NULL,
                  date            TEXT
                  )",
        [],
    )?;
    
    conn.execute(
    "INSERT INTO person (name, date) VALUES (?1, ?2)",
        params![me.name, me.date],
    )?;
    
    let mut …
Run Code Online (Sandbox Code Playgroud)

rust rust-chrono rusqlite

6
推荐指数
1
解决办法
1867
查看次数

将带有“null”值的字符串替换为真正的空值 rusqlite

我需要null使用 rusqlite 将具有该值的字符串转换为 SQLite DB 中的实际空值。我无法控制这些字符串值。我找到了 Null 结构,但我不确定如何简洁地将它作为参数传递,但当它不是时使用字符串值null

sqlite.execute(
    "INSERT INTO people (name) VALUES (?1)",
    params![
        if person.name == "null" { &Null } else { person.name }
    ],
).unwrap();
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

`if` and `else` have incompatible types

expected `&rusqlite::types::Null`, found struct `std::string::String`rustc(E0308)
Run Code Online (Sandbox Code Playgroud)

可以做这样的事情,但必须有更好的方法。

if person.name == "null" {
    sqlite.execute(
        "INSERT INTO people (name) VALUES (?1)",
        params![
            &Null
        ],
    ).unwrap();
} else {
    sqlite.execute(
        "INSERT INTO people (name) VALUES (?1)",
        params![
            person.name
        ],
    ).unwrap();
}
Run Code Online (Sandbox Code Playgroud)

我只能想象,在更现实的环境中,这样的事情会以多快的速度失去控制。是否有一些通用类型可以将字符串类型和 …

rust rusqlite

2
推荐指数
1
解决办法
1206
查看次数

标签 统计

rusqlite ×5

rust ×5

r2d2 ×1

rust-chrono ×1

sqlite ×1