如何使用 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) 我需要使用 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) 有很多文章解释了 SQLite 的多线程访问问题,但我找不到任何简单的解决方案。如何从多个线程同时工作的 Web 服务器访问 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) 我需要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)
我只能想象,在更现实的环境中,这样的事情会以多快的速度失去控制。是否有一些通用类型可以将字符串类型和 …