使用飞镖将数据插入 Postgres 数据库
Inserting data into Postgres database with dart
我有一个 postgres 数据库,其中包含一个名为“users”的 table。 table 有四个字段:
- id BIGSERIAL 主键
- display_name 文本不为空,
- 电子邮件文本不为空
- phone_number 文本
我想通过 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: syntax error at or near "display_name" )
尝试使用变量替换:
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)"
,每个变量(以 @
开头)将自动替换为地图中每个键的值。
这还将确保正确转义您的值中的特殊字符。
我有一个 postgres 数据库,其中包含一个名为“users”的 table。 table 有四个字段:
- id BIGSERIAL 主键
- display_name 文本不为空,
- 电子邮件文本不为空
- phone_number 文本
我想通过 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: syntax error at or near "display_name" )
尝试使用变量替换:
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)"
,每个变量(以 @
开头)将自动替换为地图中每个键的值。
这还将确保正确转义您的值中的特殊字符。