PostgreSQL - Python 接口:初学者指南

你好,未来的数据库大师们!我很高兴能成为你们在这激动人心的 PostgreSQL 和 Python 世界中的向导。作为一个教计算机科学多年的老师,我可以告诉你,这种组合就像花生酱和果酱一样——简单美味!那么,让我们卷起袖子,开始吧!

PostgreSQL - Python

安装

在我们开始制造魔法之前,我们需要设置我们的工具。把这想象成在烹饪美味大餐前准备你的厨房。

  1. 首先,确保你的计算机上安装了 PostgreSQL。你可以从 PostgreSQL 官方网站下载。

  2. 接下来,我们需要安装一个 Python 模块,以便我们能够与 PostgreSQL 通信。打开你的终端或命令提示符,并输入:

pip install psycopg2

这个命令就像告诉你的计算机将其工具箱中添加一个新工具。一旦完成,你就准备好了!

Python psycopg2 模块 API

现在我们有了工具,让我们快速了解一下它们能做什么。psycopg2 模块为我们提供了一套与 PostgreSQL 交互的函数。以下是常见的一些函数:

函数 描述
connect() 建立与数据库的连接
cursor() 创建一个游标对象来执行 SQL 命令
execute() 执行一个数据库操作(查询或命令)
fetchone() 获取查询结果集的下一行
fetchall() 获取查询结果的所有(剩余)行
commit() 提交当前事务
rollback() 回滚到任何挂起事务的开始
close() 关闭数据库连接

如果这些看起来像是一种外语,不要担心。我们在接下来的内容中会详细探索每一个!

连接到数据库

让我们从连接到我们的数据库开始。这就好比敲敲门,请求进入。

import psycopg2

try:
connection = psycopg2.connect(
database="mydb",
user="myuser",
password="mypassword",
host="localhost",
port="5432"
)
print("连接成功!")
except (Exception, psycopg2.Error) as error:
print("连接到 PostgreSQL 时出错", error)

在这段代码中,我们:

  1. 导入了 psycopg2 模块
  2. 使用 connect() 函数建立连接
  3. 提供了数据库名称、用户、密码等必要信息
  4. 使用 try-except 块来处理任何可能的错误

如果一切顺利,你应该会看到 "连接成功!" 被打印出来。恭喜你,你已经打开了通往数据库的大门!

创建一个表

既然我们进来了,让我们创建一个表来存储一些数据。想象你正在设置一个书架来组织你的书籍。

try:
cursor = connection.cursor()
create_table_query = '''CREATE TABLE books
(ID INT PRIMARY KEY NOT NULL,
TITLE TEXT NOT NULL,
AUTHOR TEXT NOT NULL,
PUBLISHED_DATE DATE);'''
cursor.execute(create_table_query)
connection.commit()
print("表创建成功!")
except (Exception, psycopg2.Error) as error:
print("创建表时出错", error)
finally:
if connection:
cursor.close()
connection.close()
print("PostgreSQL 连接已关闭")

这里发生的事情是:

  1. 我们创建了一个游标对象,就像我们的数据库助手
  2. 我们定义了我们的 SQL 查询来创建一个名为 'books' 的表
  3. 我们使用 execute() 来运行查询
  4. 我们 commit() 我们的变化,使它们永久化
  5. 最后,我们关闭我们的游标和连接,做一个好的数据库公民

插入操作

是时候在我们的书架上添加一些书籍了!让我们向我们的表中插入一条记录。

try:
cursor = connection.cursor()
insert_query = """ INSERT INTO books (ID, TITLE, AUTHOR, PUBLISHED_DATE)
VALUES (%s, %s, %s, %s)"""
record_to_insert = (1, "杀死一只知更鸟", "哈珀·李", "1960-07-11")
cursor.execute(insert_query, record_to_insert)
connection.commit()
print("记录插入成功")
except (Exception, psycopg2.Error) as error:
print("插入数据时出错", error)

在这段代码中:

  1. 我们创建了一个 INSERT 查询,带有占位符(%s)用于我们的值
  2. 我们定义了一个元组,包含我们想要插入的值
  3. 我们执行查询,传递我们的值元组
  4. 我们提交更改

选择操作

现在,让我们检查我们的书架,看看我们有什么!

try:
cursor = connection.cursor()
select_query = "SELECT * from books"
cursor.execute(select_query)
records = cursor.fetchall()
for row in records:
print("ID:", row[0])
print("标题:", row[1])
print("作者:", row[2])
print("出版日期:", row[3], "\n")
except (Exception, psycopg2.Error) as error:
print("获取数据时出错", error)

这里发生的事情是:

  1. 我们创建了一个 SELECT 查询,用于从我们的 'books' 表中获取所有记录
  2. 我们执行了查询
  3. 我们使用 fetchall() 获取所有结果
  4. 我们遍历结果并打印每本书的详细信息

更新操作

哎呀!我们犯了一个错误。让我们更新一条记录来修正它。

try:
cursor = connection.cursor()
update_query = """Update books set AUTHOR = %s where ID = %s"""
cursor.execute(update_query, ("Nelle Harper Lee", 1))
connection.commit()
print("记录更新成功")
except (Exception, psycopg2.Error) as error:
print("更新数据时出错", error)

在这段代码中:

  1. 我们创建了一个 UPDATE 查询,带有占位符用于新的作者名和 ID
  2. 我们执行了查询,并传入新值
  3. 我们提交了更改

删除操作

最后,让我们学习如何从我们的书架上移除一本书。

try:
cursor = connection.cursor()
delete_query = """Delete from books where ID = %s"""
cursor.execute(delete_query, (1,))
connection.commit()
print("记录删除成功")
except (Exception, psycopg2.Error) as error:
print("删除数据时出错", error)
finally:
if connection:
cursor.close()
connection.close()
print("PostgreSQL 连接已关闭")

这里发生的事情是:

  1. 我们创建了一个 DELETE 查询,带有占位符用于 ID
  2. 我们执行了查询,并传入我们想要删除的记录的 ID
  3. 我们提交了更改
  4. 最后,我们关闭我们的游标和连接

就这样!你已经学会了使用 Python 操作 PostgreSQL 的基础知识。记住,熟能生巧,所以不要害怕尝试和尝试不同的事情。快乐编码,愿你的数据库总是井井有条!

Credits: Image by storyset