微信登录

SQL 查询 - PostgreSQL 查询 - 编写和执行查询

SQL 查询 - PostgreSQL 查询 - 编写和执行查询

在现代的软件开发中,数据存储和管理是至关重要的一部分。PostgreSQL 作为一款强大的开源关系型数据库管理系统,因其丰富的功能和高可靠性,被广泛应用于各种项目中。本文将深入探讨如何在 Node.js 环境下编写和执行 PostgreSQL 查询。

1. 环境准备

在开始之前,我们需要确保已经安装了 Node.js 和 PostgreSQL,并且安装了 pg 模块,它是 Node.js 中常用的 PostgreSQL 驱动程序。可以使用以下命令来安装 pg 模块:

  1. npm install pg

2. 连接到 PostgreSQL 数据库

在执行查询之前,我们需要先建立与 PostgreSQL 数据库的连接。以下是一个简单的示例代码:

  1. const { Pool } = require('pg');
  2. // 创建一个连接池
  3. const pool = new Pool({
  4. user: 'your_user',
  5. host: 'your_host',
  6. database: 'your_database',
  7. password: 'your_password',
  8. port: 5432, // 默认端口
  9. });
  10. // 测试连接
  11. pool.query('SELECT NOW()', (err, res) => {
  12. if (err) {
  13. console.error('连接数据库时出错:', err);
  14. } else {
  15. console.log('当前时间:', res.rows[0].now);
  16. }
  17. // 关闭连接池
  18. pool.end();
  19. });

在上述代码中,我们使用 Pool 类创建了一个连接池,它可以管理多个数据库连接。然后,我们执行了一个简单的 SELECT NOW() 查询来测试连接是否成功。

3. 编写和执行简单查询

3.1 查询所有记录

假设我们有一个名为 users 的表,包含 idnameemail 字段。以下是查询所有用户记录的示例代码:

  1. const { Pool } = require('pg');
  2. const pool = new Pool({
  3. user: 'your_user',
  4. host: 'your_host',
  5. database: 'your_database',
  6. password: 'your_password',
  7. port: 5432,
  8. });
  9. async function getAllUsers() {
  10. try {
  11. const query = 'SELECT * FROM users';
  12. const result = await pool.query(query);
  13. console.log('所有用户记录:', result.rows);
  14. } catch (err) {
  15. console.error('查询用户记录时出错:', err);
  16. } finally {
  17. pool.end();
  18. }
  19. }
  20. getAllUsers();

3.2 根据条件查询记录

如果我们只想查询 nameJohn 的用户记录,可以使用以下代码:

  1. const { Pool } = require('pg');
  2. const pool = new Pool({
  3. user: 'your_user',
  4. host: 'your_host',
  5. database: 'your_database',
  6. password: 'your_password',
  7. port: 5432,
  8. });
  9. async function getUsersByName(name) {
  10. try {
  11. const query = 'SELECT * FROM users WHERE name = $1';
  12. const values = [name];
  13. const result = await pool.query(query, values);
  14. console.log(`姓名为 ${name} 的用户记录:`, result.rows);
  15. } catch (err) {
  16. console.error('查询用户记录时出错:', err);
  17. } finally {
  18. pool.end();
  19. }
  20. }
  21. getUsersByName('John');

在上述代码中,我们使用了参数化查询,通过 $1 占位符来防止 SQL 注入攻击。

4. 插入、更新和删除记录

4.1 插入记录

以下是向 users 表中插入一条新记录的示例代码:

  1. const { Pool } = require('pg');
  2. const pool = new Pool({
  3. user: 'your_user',
  4. host: 'your_host',
  5. database: 'your_database',
  6. password: 'your_password',
  7. port: 5432,
  8. });
  9. async function insertUser(name, email) {
  10. try {
  11. const query = 'INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *';
  12. const values = [name, email];
  13. const result = await pool.query(query, values);
  14. console.log('插入的用户记录:', result.rows[0]);
  15. } catch (err) {
  16. console.error('插入用户记录时出错:', err);
  17. } finally {
  18. pool.end();
  19. }
  20. }
  21. insertUser('Jane', 'jane@example.com');

4.2 更新记录

如果我们想更新 nameJohn 的用户的 email 地址,可以使用以下代码:

  1. const { Pool } = require('pg');
  2. const pool = new Pool({
  3. user: 'your_user',
  4. host: 'your_host',
  5. database: 'your_database',
  6. password: 'your_password',
  7. port: 5432,
  8. });
  9. async function updateUserEmail(name, newEmail) {
  10. try {
  11. const query = 'UPDATE users SET email = $1 WHERE name = $2 RETURNING *';
  12. const values = [newEmail, name];
  13. const result = await pool.query(query, values);
  14. console.log('更新后的用户记录:', result.rows[0]);
  15. } catch (err) {
  16. console.error('更新用户记录时出错:', err);
  17. } finally {
  18. pool.end();
  19. }
  20. }
  21. updateUserEmail('John', 'newjohn@example.com');

4.3 删除记录

以下是删除 nameJane 的用户记录的示例代码:

  1. const { Pool } = require('pg');
  2. const pool = new Pool({
  3. user: 'your_user',
  4. host: 'your_host',
  5. database: 'your_database',
  6. password: 'your_password',
  7. port: 5432,
  8. });
  9. async function deleteUser(name) {
  10. try {
  11. const query = 'DELETE FROM users WHERE name = $1 RETURNING *';
  12. const values = [name];
  13. const result = await pool.query(query, values);
  14. console.log('删除的用户记录:', result.rows[0]);
  15. } catch (err) {
  16. console.error('删除用户记录时出错:', err);
  17. } finally {
  18. pool.end();
  19. }
  20. }
  21. deleteUser('Jane');

5. 总结

操作类型 示例代码 说明
连接数据库 const pool = new Pool({...}); 使用 Pool 类创建连接池
查询所有记录 SELECT * FROM users 查询 users 表中的所有记录
根据条件查询 SELECT * FROM users WHERE name = $1 使用参数化查询防止 SQL 注入
插入记录 INSERT INTO users (name, email) VALUES ($1, $2) RETURNING * 插入新记录并返回插入的记录
更新记录 UPDATE users SET email = $1 WHERE name = $2 RETURNING * 更新符合条件的记录并返回更新后的记录
删除记录 DELETE FROM users WHERE name = $1 RETURNING * 删除符合条件的记录并返回删除的记录

通过以上步骤,我们可以在 Node.js 环境下轻松地编写和执行 PostgreSQL 查询。在实际开发中,我们可以根据具体需求灵活运用这些技巧,实现更复杂的数据库操作。

SQL 查询 - PostgreSQL 查询 - 编写和执行查询