【问题标题】:Inserting data into Postgres database with dart使用 dart 将数据插入 Postgres 数据库
【发布时间】:2020-11-07 02:00:36
【问题描述】:

我有一个 postgres 数据库,其中包含一个名为“users”的表。该表有四个字段:

  • id BIGSERIAL 主键
  • display_name TEXT NOT NULL,
  • 电子邮件文本不为空
  • 电话号码文本

我想从 dart 代码中添加数据。 我的尝试看起来像这样:

import "dart:io";
import "package:postgres/postgres.dart";
void main() async{
  var connection = PostgreSQLConnection(
        "localhost", 5432, "test",
        username: "something", password: "notTellingYou");
    try {
      await connection.open();
    } catch (e) {
      print(e);
    }

  Map<String, dynamic> data = {
    "display_name": "foo",
    "email": "foo@gmail.com"
  };
  await setData(connection, "users", data);
  
}

Future<void> setData(PostgreSQLConnection connection, String table, Map<String, dynamic> data) async {
  await connection.query("""
    INSERT INTO $table(${data.keys})
    VALUES ${data.values};
  """);
}

问题是我遇到了异常

(PostgreSQLSeverity.error 42601:“display_name”处或附近的语法错误)

【问题讨论】:

    标签: postgresql dart crud


    【解决方案1】:

    尝试使用变量替换:

    import "dart:io";
    import "package:postgres/postgres.dart";
    
    Future<void> main() async {
      final connection = PostgreSQLConnection("localhost", 5432, "test",
          username: "something", password: "notTellingYou");
      await connection.open();
    
      final data = <String, dynamic>{
        "display_name": "foo",
        "email": "foo@gmail.com"
      };
      await setData(connection, "users", data);
      await connection.close();
    }
    
    Future<void> setData(PostgreSQLConnection connection, String table,
        Map<String, dynamic> data) async {
      await connection.execute(
          'INSERT INTO $table (${data.keys.join(', ')}) VALUES (${data.keys.map((k) => '@$k').join(', ')})',
          substitutionValues: data);
    }
    

    此处生成的文本将为:"INSERT INTO users (display_name, email) VALUES (@display_name, @email)",并且每个变量(以 @ 开头)将自动替换为地图中每个键的值。

    这也将确保您的值中特殊字符的正确转义。

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2014-01-12
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多