- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 serde_json::Map
序列化 JSON 值到 SQLite 数据库中。我想在 Map
中使用多种数据类型并将它们转换为适当的 SQLite 数据类型。
map 创建于 collect_values
并传递给 write_record
功能。 new_db
函数创建一个 rustqlite::Connection
传递给 write_record
的上下文
但是,当我尝试从 map 中插入值时,出现此错误
error[E0277]: the trait bound `serde_json::value::Value: rusqlite::types::to_sql::ToSql` is not satisfied
--> src/main.rs:51:9
|
51 | / params![
52 | | &values.get("TEST-KEY-1").unwrap_or(&missing_value),
53 | | &values.get("TEST-KEY-2").unwrap_or(&missing_value)
54 | | ],
| |_________^ the trait `rusqlite::types::to_sql::ToSql` is not implemented for `serde_json::value::Value`
|
= note: required because of the requirements on the impl of `rusqlite::types::to_sql::ToSql` for `&serde_json::value::Value`
= note: required because of the requirements on the impl of `rusqlite::types::to_sql::ToSql` for `&&serde_json::value::Value`
= note: required for the cast to the object type `dyn rusqlite::types::to_sql::ToSql`
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
我需要手动实现序列化器吗?我以为是rusqlite的
types
模块已经完成了这项工作。
[package]
name = "sqlite-min-example"
version = "0.1.0"
authors = ["test"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rusqlite = "0.23.1"
serde_json = "1.0"
serde = {version = "1.0.113", default-features = false}
main.rs
use rusqlite::{params, Connection, Result};
use serde_json::json;
use serde_json::map::Map;
fn main() {
println!("Opening connection");
let conn = new_db();
match conn {
Ok(ctx) => {
let mp = collect_values();
let res = insert_record(&mp, &ctx);
}
Err(e) => {
eprintln!("{}", e);
}
}
}
pub fn new_db() -> Result<rusqlite::Connection> {
let conn = Connection::open("test.db")?;
//let conn = Connection::open_in_memory()?;
conn.execute(
"CREATE TABLE IF NOT EXISTS testdb (
field1 INTEGER,
field2 INTEGER
)",
params![],
)?;
// return the new connection context (object)
Ok(conn)
}
pub fn insert_record(
values: &serde_json::map::Map<std::string::String, serde_json::value::Value>,
conn: &rusqlite::Connection,
) -> Result<()> {
// Insert this if we can't find a value for a key for some reason...
let missing_value = json!("MISSINGVAL");
conn.execute(
"INSERT INTO testdb
(
field1,
field2
)
VALUES (
?1, ?2
)",
params![
&values.get("TEST-KEY-1").unwrap_or(&missing_value),
&values.get("TEST-KEY-2").unwrap_or(&missing_value)
],
)?;
// return any errors that occured
Ok(())
}
pub fn collect_values() -> serde_json::map::Map<std::string::String, serde_json::value::Value> {
// Take in the Modbus context and return a map of keys (field names) and their associated values
let mut map = Map::new();
map.insert("TEST-KEY-1".to_string(), json!(1234));
map.insert("TEST-KEY-2".to_string(), json!(5678));
return map;
}
最佳答案
在 Cargo.toml 中为 rusqlite 添加适当的功能:
rusqlite = { version = "0.23.1", features = ["serde_json"] }
也可以看看:
关于sqlite - 特征 `rusqlite::types::to_sql::ToSql` 未针对 `serde_json::value::Value` 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62662603/
我有一个代码: $update= DB::table('Appraiser_commands')->where('cycle_id', $cycleid)->where('user_id',$user
我正在尝试在数据表中显示 2 个 MySQL 表的详细信息。我尝试将每个 get 设置为单独的变量并将它们作为集合的一部分返回。它返回第一个变量,但不返回第二个变量,就好像它被忽略一样。 因此我选择尝
我正在向我的 pools 表中插入大量数据。同时,在执行此操作时,我需要将 draws 表中的 isactive 字段设置为 0。但是我在这样做时遇到了问题。 代码: $pools =
我有一个非常非常奇怪的问题。我们的团队有一段时间忽略了这一点,因为它没有破坏任何东西(我知道,这不是一个好的态度),但我真的很想知道到底发生了什么/可能发生了什么。我们使用的是 Laravel 5.2
我有一个存储过程如下: ALTER PROCEDURE [dbo].[Addworkshop] @title varchar(100), @time varchar(10),
我在 Laravel 工作,我有兴趣检查包含 with() 语句的 Eloquent 查询生成的 SQL 语句。出于某种原因,我只得到主要查询。例如,当我运行 class Child extends
我正在尝试调试我在测试套件中执行的一些 SQL 查询。使用以下调试代码: \Log::debug(User::first()->jobs()->toSql()); 打印出来的 SQL 是: `sele
我想对 rusqlite 使用准备好的语句. Rusqlite 为 String、&str 和 a bunch of other types 实现了特征 ToSql : extern crate ru
我有一个用于将 JSON 文件插入数据库的加载脚本,该脚本使用 AJAX 和加载指示器执行了将近 50 次。我想使用下面的插入结构来尽快完成这项工作,以避免执行大量的单个插入语句 INSERT INT
我在 Laravel Eloquent 中有这个查询: $measures = Measure::groupBy('time') ->selectRaw('time, sum("del
我正在尝试从 serde_json::Map 序列化 JSON 值到 SQLite 数据库中。我想在 Map 中使用多种数据类型并将它们转换为适当的 SQLite 数据类型。 map 创建于 coll
我是一名优秀的程序员,十分优秀!