使用sql_query的get_results不返回插入行的数组,Postgres 15,Rust 1.70.0,Diesel 2.0。

huangapple go评论93阅读模式
英文:

get_results using sql_query not returning array of inserted rows , Postgres 15, Rust 1.70.0 , Diesel 2.0

问题

以下是您提供的代码的翻译:

  1. 能够将行添加到表中,但sql_query(query).get_results不返回行数组 即使数据已插入,我仍然得到一个空数组。
  2. 当使用Select语句与get_results一起使用时,将返回一个值数组。
  3. 不确定我做错了什么。 请建议。
  4. 结构体Asset具有#[derive(QueryableByName)]
  5. 谢谢。
  6. #[test]
  7. fn test_get_result(){
  8. use crate::service_tests::prelude::connection_without_transaction;
  9. use diesel::sql_query;
  10. use diesel::RunQueryDsl;
  11. use crate::models::asset::Asset;
  12. let mut connection = connection_without_transaction();
  13. let query = "Select * from assets";
  14. let result1 = diesel::sql_query(query)
  15. .get_results::<Asset>(&mut connection)
  16. .unwrap();
  17. dbg!(result1.len());
  18. let query = "insert into assets (
  19. parent_assetcode,category_code,label_code,
  20. erp_code,name,description,is_depreciable,
  21. physical_id,machine_tag_no,in_store,
  22. quantity,is_multiple_entries,group_qty,
  23. acquired_value,acquired_date,date_put_to_use,
  24. physical_verification,asset_type,asset_user,
  25. cost_center_code,department_code,branch_code,
  26. location_code,physical_location_code,requires_maintenance,
  27. created_user_id,remarks
  28. )
  29. values
  30. (
  31. 'BL00000SP','BLD','L-BLD-2','BL00000SP',
  32. 'name of asset','descr',false,'aaaa',
  33. 'mactag',true,1200,false,10,13250.0,
  34. '2023-05-01','2023-05-02',true,'Owned',
  35. 1,'162','NA','MA003','276 VMART PATNA KURJI',
  36. 'NA',false,1,'remarksss'
  37. )";
  38. let result2 = diesel::sql_query(query)
  39. .get_results::<Asset>(&mut connection)
  40. .unwrap();
  41. dbg!(result2.len());
  42. }

输出如下:

  1. 运行1个测试
  2. [src/service_tests/csv_import_test.rs:53] result1.len() = 44
  3. [src/service_tests/csv_import_test.rs:78] result2.len() = 0
  4. 测试service_tests::csv_import_test::test_get_result ... ok

请注意,我已将代码中的HTML实体引号(")转换为正常的双引号(")以使其有效。

英文:

Able to add rows into the table but sql_query(query).get_results does not return array of rows. i.e. I am getting a null array though data gets inserted.

When get_results is used with Select statement an array of values is returned.

Not sure what I am doing wrong. Please advise.

The struct Asset has #[derive(QueryableByName)].
Thank you.

  1. #[test]
  2. fn test_get_result(){
  3. use crate::service_tests::prelude::connection_without_transaction;
  4. use diesel::sql_query;
  5. use diesel::RunQueryDsl;
  6. use crate::models::asset::Asset;
  7. let mut connection = connection_without_transaction();
  8. let query = &quot;Select * from assets&quot;;
  9. let result1 = diesel::sql_query(query)
  10. .get_results::&lt;Asset&gt;(&amp;mut connection)
  11. .unwrap();
  12. dbg!(result1.len());
  13. let query = &quot;insert into assets (
  14. parent_assetcode,category_code,label_code,
  15. erp_code,name,description,is_depreciable,
  16. physical_id,machine_tag_no,in_store,
  17. quantity,is_multiple_entries,group_qty,
  18. acquired_value,acquired_date,date_put_to_use,
  19. physical_verification,asset_type,asset_user,
  20. cost_center_code,department_code,branch_code,
  21. location_code,physical_location_code,requires_maintenance,
  22. created_user_id,remarks
  23. )
  24. values
  25. (
  26. &#39;BL00000SP&#39;,&#39;BLD&#39;,&#39;L-BLD-2&#39;,&#39;BL00000SP&#39;,
  27. &#39;name of asset&#39;,&#39;descr&#39;,false,&#39;aaaa&#39;,
  28. &#39;mactag&#39;,true,1200,false,10,13250.0,
  29. &#39;2023-05-01&#39;,&#39;2023-05-02&#39;,true,&#39;Owned&#39;,
  30. 1,&#39;162&#39;,&#39;NA&#39;,&#39;MA003&#39;,&#39;276 VMART PATNA KURJI&#39;,
  31. &#39;NA&#39;,false,1,&#39;remarksss&#39;
  32. )&quot;;
  33. let result2 = diesel::sql_query(query)
  34. .get_results::&lt;Asset&gt;(&amp;mut connection)
  35. .unwrap();
  36. dbg!(result2.len());
  37. }

The output is below:

  1. running 1 test
  2. [src/service_tests/csv_import_test.rs:53] result1.len() = 44
  3. [src/service_tests/csv_import_test.rs:78] result2.len() = 0
  4. test service_tests::csv_import_test::test_get_result ... ok

答案1

得分: 1

以下是您提供的内容的翻译:

migrations - up.sql ->

  1. /// 安装 Diesel 后,使用 diesel migration generate create table plans 来生成查询的表,
  2. /// 然后运行 diesel setup 和 diesel migration run 来更新 schema.rs
  3. create table plans(
  4. id serial not null,
  5. code varchar(20) not null,
  6. constraint pk_test_id primary key(id)
  7. );

models\plan.rs ->

  1. /// 在 models 目录下创建一个名为 plan.rs 的文件
  2. // 添加以下代码 - 创建一个用于查询表 plans 中的值的结构体
  3. use diesel::prelude::*;
  4. use serde::{Deserialize, Serialize};
  5. use crate::schema::plans;
  6. #[derive(Debug, Clone, Identifiable, Insertable, AsChangeset, Queryable, QueryableByName, Deserialize, Serialize)]
  7. #[diesel(table_name = plans)]
  8. #[diesel(primary_key(code))]
  9. pub struct Plan {
  10. pub id: i32,
  11. pub code: String
  12. }

services_test_plan.rs ->

  1. /// 在 services_test_plan.rs 中创建一个测试文件,包含以下代码
  2. // 使用终端运行测试 >> cargo test test_get_result_plans
  3. #[test]
  4. fn test_get_result_plans(){
  5. use crate::service_tests::prelude::connection_without_transaction;
  6. use diesel::sql_query;
  7. use diesel::RunQueryDsl;
  8. use crate::models::test::Plan;
  9. use crate::schema::plans::code;
  10. use crate::schema::plans::id;
  11. let mut connection = connection_without_transaction();
  12. let query = "Select * from plans"; // 返回表 plans 中的现有行
  13. let result1: Result<Vec<Plan>, diesel::result::Error> = diesel::sql_query(query).get_results::<Plan>(&mut connection);
  14. dbg!(result1.unwrap());
  15. let query = "INSERT INTO plans (code) VALUES ('CC-1') RETURNING *"; // 向表 plans 中的列 'code' 插入数据
  16. let result2: Result<Vec<Plan>, diesel::result::Error> = diesel::sql_query(query).get_results::<Plan>(&mut connection);
  17. dbg!(result2.unwrap()); // result2 包含表 plans 中新创建的行。
  18. }
英文:

migrations - up.sql ->

  1. /// after installing diesel , using diesel migration generate create table plans to query,
  2. /// then run diesel setup and diesel migration run to update schema.rs
  3. create table plans(
  4. id serial not null,
  5. code varchar(20) not null,
  6. constraint pk_test_id primary key(id)
  7. );

models\plan.rs ->

  1. /// create a file - plan.rs under models directory plan.rs
  2. // add the following code - creates a struct to query hold values from table plans
  3. use diesel::prelude::*;
  4. use serde::{Deserialize, Serialize};
  5. use crate::schema::plans;
  6. #[derive(Debug, Clone, Identifiable, Insertable, AsChangeset, Queryable,QueryableByName,Deserialize,Serialize)]
  7. #[diesel(table_name = plans)]
  8. #[diesel(primary_key(code))]
  9. pub struct Plan {
  10. pub id: i32,
  11. pub code: String
  12. }

services_test_plan.rs

  1. /// create a test file - services_test_plan.rs with the following code
  2. // run the test using from terminal &gt;&gt; cargo test test_get_result_plans
  3. #[test]
  4. fn test_get_result_plans(){
  5. use crate::service_tests::prelude::connection_without_transaction;
  6. use diesel::sql_query;
  7. use diesel::RunQueryDsl;
  8. use crate::models::test::Plan;
  9. use crate::schema::plans::code;
  10. use crate::schema::plans::id;
  11. let mut connection = connection_without_transaction();
  12. let query = &quot;Select * from plans&quot;; // returns existing rows in table plans
  13. let result1:Result&lt;Vec&lt;Plan&gt;, diesel::result::Error&gt; = diesel::sql_query(query).get_results::&lt;Plan&gt;(&amp;mut connection);
  14. dbg!(result1.unwrap());
  15. let query = &quot;INSERT INTO plans (code) VALUES (&#39;CC-1&#39;) RETURNING *&quot;; // insert data into plans table column &#39;code&#39;
  16. let result2: Result&lt;Vec&lt;Plan&gt;, diesel::result::Error&gt; = diesel::sql_query(query).get_results::&lt;Plan&gt;(&amp;mut connection);
  17. dbg!(result2.unwrap()); // result2 contains newly created rows in table plans.
  18. }

huangapple
  • 本文由 发表于 2023年7月3日 05:50:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/76600930.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定