Python PostgreSQL - 数据库连接2025 年 1 月 5 日 | 22 分钟阅读 PostgreSQL 具有用于查询执行的内置 shell。在尝试连接之前,请确保 PostgreSQL 已在您的系统上正确安装。按照 PostgreSQL shell 的提示提供服务器、数据库、登录名和密码等信息。如果您提供的信息全部正确,则可以建立到 PostgreSQL 数据库的连接。 在提供详细信息时,您可以使用 shell 建议的默认服务器、数据库、端口和用户名。 Python 连接建立连接实例由 psycopg2 连接类表示和管理。connect() 方法可用于建立新连接。 示例 要连接到已存在的数据库,请使用以下 Python 代码。如果数据库已构建,则将返回一个代表该数据库的对象。PostgreSQL 的默认数据库名为 postrgre。 Python PostgreSQL - 创建数据库PostgreSQL 中的 CREATE DATABASE 语句可用于创建数据库。 语法 示例 以下 PostgreSQL 查询创建一个名为 testdb 的数据库。 使用 PostgreSQL 中的 \l 命令,您可以列出数据库。如果您检查数据库列表,可以找到新创建的数据库。 使用 Python 创建数据库psycopg2 的 cursor 类提供了多种方法来执行各种 PostgreSQL 命令、检索记录和传输数据。Connection 类的 cursor() 函数可用于构造游标对象。 该类的 execute() 函数接受 PostgreSQL 查询作为参数并执行它。 因此,请使用此方法执行 PostgreSQL 中的 CREATE DATABASE 查询来构建数据库。 示例 以下 Python 示例创建一个名为 mydb 的 PostgreSQL 数据库。 输出 Database created successfully........ Python PostgreSQL - 创建表PostgreSQL 中的 CREATE TABLE 命令可用于在数据库中创建新表。执行此操作时,您必须提供表名、列名和数据类型。 语法 以下是 PostgreSQL CREATE TABLE 语句的语法。 示例 以下示例创建了一个名为 CRICKETERS 的 PostgreSQL 表。 同样,您可以使用 \d 来获取已构建表的描述,如下所示。 使用 Python 创建表要使用 Python 创建表,您必须使用 pyscopg2 的 Cursor 的 execute() 函数来执行 CREATE TABLE 命令。 示例 以下 Python 示例使用 employee 表来创建。 输出 Table created successfully........ Python PostgreSQL - 插入数据PostgreSQL 中的 INSERT INTO 命令可用于将记录插入到已存在的表中。执行此操作时,您必须提供表的名称以及其每个列的值。 语法 示例 假设,如下所示,我们已使用 CREATE TABLE 命令创建了一个名为 CRICKETERS 的表。 以下 PostgreSQL 语句将一行添加到上面已创建的表中。 如果您在使用 INSERT INTO 命令插入记录时省略了任何列名,则记录将在您跳过的列所在的位置以空值插入。 如果提供的值与数据库中相应列的名称匹配,您也可以在不提供列名的情况下将条目插入表中。 插入数据后,您可以使用 SELECT 命令(如下所示)来确认表的内容。 使用 Python 插入数据execute() 函数是 psycopg2 游标类的一个特性。此函数在接受查询作为参数后执行它。 因此,要使用 Python 将数据插入 PostgreSQL 中的表,请执行以下操作:
示例 输出 Records inserted........ Python PostgreSQL - 选择数据PostgreSQL 中的 SELECT 命令可用于获取现有表的内容。 语法 以下是 PostgreSQL SELECT 语句的语法。 示例 假设我们使用以下查询创建了一个名为 CRICKETERS 的表。 此外,假设我们使用 INSERT 命令向其中添加了五个记录,如下所示。 如果您希望获取所有记录的所有列,则必须将列名更改为 "*",如下所示。 使用 Python 检索数据读取 任何数据库操作都涉及从数据库中检索一些相关数据。使用 psycopg2 提供的 fetch() 函数,您可以从 PostgreSQL 检索数据。 Cursor 类中有三种方法——fetchall()、fetchmany() 和 fetchone()——其中,
注意:当使用游标对象查询表时,会返回一个称为结果集的对象。示例 输出 ('Ramya', 'Rama priya', 27, 'F', 9000.0) ('Sharukh', 'Sheik', 25, 'M', 8300.0), ('Sarmista', 'Sharma', 26, 'F', 10000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0)] Python PostgreSQL - WHERE 子句使用 WHERE 子句,您可以在执行 SELECT、UPDATE 或 DELETE 操作时设置条件来过滤记录。满足指定标准的记录将被用于该过程。 语法 PostgreSQL 中 WHERE 子句的语法如下。 示例 假设我们使用以下查询创建了一个名为 CRICKETERS 的表。 此外,假设我们使用 INSERT 命令向其中添加了五个记录,如下所示。 以下 SELECT 查询检索年龄大于 35 的条目。 使用 Python 的 WHERE 子句使用 Python 程序,通过执行带有 WHERE 子句的 SELECT 语句并将其作为参数发送到 execute() 函数,可以从表中获取特定条目。 示例 此 Python 示例演示了如何在 Python 中使用 WHERE 命令。 输出 [('Raju', 'Raj', 18, 'M', 3000.0), ('Mohan', 'Sai', 21, 'M', 8000.0)] Python PostgreSQL - ORDER BY语法 PostgreSQL ORDER BY 子句的语法如下。 示例 假设我们使用以下查询创建了一个名为 CRICKETERS 的表。 此外,假设我们使用 INSERT 命令向其中添加了五个记录,如下所示。 以下 SELECT 查询使用参与者的年龄对 CRICKETERS 表的行进行排序检索。 表的记录可以使用多个列进行排序。以下 SELECT 查询使用 FIRST_NAME 和 age 字段对 CRICKETERS 表的记录进行排序。 ORDER BY 子句默认按升序对表的记录进行排序。使用 DESC 作为 ,您可以按降序对结果进行排序。 使用 Python 的 ORDER BY 子句要以指定顺序获取表的內容,请在游标对象上使用 execute() 函数,并将 SELECT 语句和 ORDER BY 子句作为参数提供给它。 示例 在下面的示例中,我们创建了一个具有 name 和 employee 列的表,填充它,然后使用 ORDER BY 子句按年龄升序检索数据。 输出 [('Sharukh', 'Sheik', 25, 'M', 8300.0), ('Sarmista', 'Sharma', 26, 'F', 10000.0)] Python PostgreSQL - 更新表使用 UPDATE 命令可以更改 PostgreSQL 表中现有记录的内容。您必须将其与 WHERE 子句结合使用,以便更新特定行。 语法 PostgreSQL UPDATE 语句的语法如下。 示例 假设我们使用以下查询创建了一个名为 CRICKETERS 的表。 此外,假设我们使用 INSERT 命令向其中添加了五个记录,如下所示。 以下语句更改了板球运动员的年龄;他的名字是 Shikhar。 如果您检索 FIRST_NAME 为 Shikhar 的记录,您将看到年龄值已更改为 45。 如果未使用 WHERE 子句,则所有记录的值都将被更改。由于以下 UPDATE 语句,CRICKETERS 表中的所有记录的年龄都增加了一岁。 如果您使用 SELECT 命令获取表的内容,您将看到更改后的值如下。 使用 Python 更新记录execute() 函数是 psycopg2 游标类的一个特性。此函数在接受查询作为参数后执行它。 因此,为了使用 Python 将数据插入 PostgreSQL 数据库,请执行以下操作:
示例 以下 Python 代码修改了 Employee 表的数据并获取了结果。 输出 Contents of the Employee table: [ ('Vinay', 'Battacharya', 20, 'M', 6000.0), ('Sharukh', 'Sheik', 25, 'M', 8300.0), ('Sarmista', 'Sharma', 26, 'F', 10000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0)] Table updated...... Contents of the Employee table after the update operation: [ ('Sarmista', 'Sharma', 26, 'F', 10000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0), ('Vinay', 'Battacharya', 21, 'M', 6000.0), ('Sharukh', 'Sheik', 26, 'M', 8300.0)] Python PostgreSQL - 删除数据PostgreSQL 数据库的 DELETE FROM 语句可用于删除现有表中的记录。您必须将其与 WHERE 子句结合使用,以删除特定数据。 语法 PostgreSQL 中 DELETE 查询的语法如下。 示例 假设我们使用以下查询创建了一个名为 CRICKETERS 的表。 此外,如果我们使用 INSERT 语句向其中添加了 5 条记录,如下所示。 使用此声明,姓氏为“Sangakkara”的记录将被删除。 我们已经删除了一个条目,因此当您使用 SELECT 查询获取表的内容时,您只会看到四个。 如果 DELETE FROM 语句在没有 WHERE 子句的情况下执行,则将删除指定表中的所有记录。 当您尝试使用 SELECT 查询获取 CRICKETERS 表的内容时,您将收到一个空的结果集,如下所示,因为所有记录都已被删除。 使用 Python 删除数据execute() 函数是 psycopg2 游标类的一个特性。此函数在接受查询作为参数后执行它。 因此,为了使用 Python 将数据插入 PostgreSQL 数据库,请执行以下操作:
示例 以下 Python 代码删除了 EMP 表中年龄值大于 25 的行。 输出 Contents of the table: ('Sarmista', 'Sharma', 26, 'F', 10000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0), ('Vinay', 'Battacharya', 21, 'M', 6000.0), ('Sharukh', 'Sheik', 26, 'M', 8300.0)] Contents of the table after delete operation: [('Tripthi', 'Mishra', 24, 'F', 6000.0), ('Vinay', 'Battacharya', 21, 'M', 6000.0)] Python PostgreSQL - 删除表语法 示例 假设我们使用以下查询生成了两个表:CRICKETERS 和 EMPLOYEES。 如果您使用 "\dt" 命令验证表列表,则之前生成的表现在可以显示如下。 以下语句将 Employee 表从数据库中删除。 如果您再次获取表列表,您将只能看到一个表,因为您已删除 Employee 表。 由于您之前已删除 Employee 表,因此当您尝试再次删除它时,您将收到以下错误:“表不存在。” 您可以使用 DELTE 语句结合 IF EXISTS 子句来解决此问题。如果表存在,则将其删除;否则,将跳过 DELETE 操作。 使用 Python 移除整个表使用 DROP 语句,您可以随时删除表。但是,由于无法恢复从现有数据库中删除的数据,因此在删除任何表时都必须格外小心。 输出 #Table dropped... Python PostgreSQL - LIMITPostgreSQL SELECT 语句中的 LIMIT 子句允许您限制数量。 语法 PostgreSQL 中 LIMIT 子句的语法如下。 示例 假设我们使用以下查询创建了一个名为 CRICKETERS 的表。 此外,假设我们使用 INSERT 命令向其中添加了五个记录,如下所示。 以下语句使用 LIMIT 子句从 Cricketers 表中提取前三行。 您可以将 OFFSET 子句与 LIMIT 结合使用,以获取从特定记录开始的记录,也称为偏移量。 使用 Python 的 LIMIT 子句以下 Python 示例通过检索名为 EMPLOYEE 的表的内容,将返回的行数限制为两个。 示例 输出 [('Sharukh', 'Sheik', 25, 'M', 8300.0), ('Sarmista', 'Sharma', 26, 'F', 10000.0)] Python PostgreSQL - JOIN在将数据拆分到两个表中后,您可以使用 JOIN 来获取这两个表的组合记录。 示例 假设我们已将表命名为 CRICKETERS 并向其中添加了五个记录,如下所示。 此外,如果我们创建了另一个名为 OdiStats 的数据库并向其中添加了五个记录,如下所示。 通过合并这两个表的值检索到的数据如下。 使用 Python 的 JOIN在将数据拆分到两个表中后,您可以使用 JOIN 来获取这两个表的组合记录。 示例 以下 Python 程序演示了 JOIN 子句的使用。 输出 [('Ramya', 'Rama priya', 27, 'F', 9000.0, 101, 101, 'Krishna@mymail.com', 'Hyderabad'), ('Vinay', 'Battacharya', 20, 'M', 6000.0, 102, 102, 'Raja@mymail.com', 'Vishakhapatnam'), ('Sharukh', 'Sheik', 25, 'M', 8300.0, 103, 103, 'Krishna@mymail.com ', 'Pune'), ('Sarmista', 'Sharma', 26, 'F', 10000.0, 104, 104, 'Raja@mymail.com', 'Mumbai')] |
我们请求您订阅我们的新闻通讯以获取最新更新。