Python执行PostgreSQL数据库查询语句,并打印查询结果

81 阅读2分钟

哈喽,大家好,我是木头左!

准备工作:安装必要库和设置数据库连接

在开始使用Python执行PostgreSQL数据库查询之前,需要确保已经安装了psycopg2这个库,它是Python语言中用来操作PostgreSQL数据库的一个适配器。可以通过以下命令进行安装:

pip install psycopg2-binary

安装完成后,需要创建一个连接到PostgreSQL数据库的函数,如下所示:

import psycopg2from psycopg2 import OperationalErrordef create_conn():    conn = None    try:        conn = psycopg2.connect(            database="your_database",            user="your_username",            password="your_password",            host="localhost",            port="5432"        )        print("Connection to PostgreSQL DB successful")    except OperationalError as e:        print(f"The error '{e}' occurred")    return conn

请记得将上述代码中的your_database, your_usernameyour_password 替换为你自己的数据库信息。

查询数据:编写和执行SQL语句

一旦建立了与数据库的连接,下一步就是编写SQL查询语句,并使用Python来执行这些语句。以下是一个简单的例子,展示了如何从名为employees的表中选择所有记录:

def execute_query(connection, query):    cursor = connection.cursor()    postgreSQL_select_Query = query    cursor.execute(postgreSQL_select_Query)    records = cursor.fetchall()    return recordsconnection = create_conn()query = "SELECT * FROM employees;"records = execute_query(connection, query)for row in records:    print("ID = ", row[0], )    print("NAME = ", row[1])    print("AGE = ", row[2], "")

在这个例子中,execute_query函数接收一个数据库连接对象和一个SQL查询字符串作为参数,然后它创建了一个游标对象来执行查询。fetchall()方法是用来获取所有的查询结果。

处理查询结果:格式化输出和异常处理

当得到查询结果后,通常需要对这些结果进行一些处理,比如格式化输出到控制台或者文件,甚至可能是进一步的数据分析。同时,也需要考虑到异常处理,以确保程序的健壮性。

def format_and_print_results(records):    if records:        print("Query Results:")        for record in records:            print(f"ID: {record[0]}, Name: {record[1]}, Age: {record[2]}")    else:        print("No records found.")try:    records = execute_query(connection, query)    format_and_print_results(records)except (Exception, psycopg2.DatabaseError) as error:    print(error)finally:    if connection is not None:        connection.close()        print("PostgreSQL connection is closed")

在这部分代码中,定义了一个format_and_print_results函数来美化输出的结果。同时,用try...except...finally结构来确保即使发生错误,数据库连接也能被正确关闭。

高级功能:参数化查询和事务处理

为了提高性能和安全性,可以使用参数化查询来避免SQL注入攻击,并使用事务来确保数据的一致性。

def parameterized_query(connection, query, params):    cursor = connection.cursor()    cursor.execute(query, params)    records = cursor.fetchall()    return recordstry:    connection = create_conn()    with connection.cursor() as cursor:        query = "INSERT INTO employees (id, name, age) VALUES (%s, %s, %s)"        params = (1, 'John', 30)        cursor.execute(query, params)        connection.commit()        print("Record inserted successfully into employees table")except (Exception, psycopg2.DatabaseError) as error:    print(error)finally:    if connection is not None:        connection.close()        print("PostgreSQL connection is closed")

在这个例子中,使用了占位符%s来代替实际的参数值,然后在execute方法中传入一个包含实际参数值的元组。这样做既安全又高效。

我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!