pg库psycopg2

复制代码
import psycopg2

class PostgreSQLDB:
    def __init__(self, host, port, user, password, database):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.database = database
        self.connection = None

    def connect(self):
        try:
            self.connection = psycopg2.connect(
                host=self.host,
                port=self.port,
                user=self.user,
                password=self.password,
                database=self.database
            )
            return True
        except psycopg2.Error as err:
            print(f"Error connecting to PostgreSQL: {err}")
            return False

    def close(self):
        if self.connection:
            self.connection.close()

    def insert_batch(self, table, columns, data_list):
        placeholders = ', '.join(['%s'] * len(columns))
        column_names = ', '.join(columns)
        query = f"INSERT INTO {table} ({column_names}) VALUES ({placeholders})"
        cursor = self.connection.cursor()
        try:
            psycopg2.extras.execute_batch(cursor, query, data_list)
            self.connection.commit()
            return True
        except psycopg2.Error as err:
            self.connection.rollback()
            print(f"Error inserting batch data: {err}")
            return False
        finally:
            cursor.close()

    def update(self, table, set_values, condition):
        set_statements = ', '.join([f"{key} = %s" for key in set_values])
        query = f"UPDATE {table} SET {set_statements} WHERE {condition}"
        cursor = self.connection.cursor()
        try:
            cursor.execute(query, tuple(set_values.values()))
            self.connection.commit()
            return True
        except psycopg2.Error as err:
            self.connection.rollback()
            print(f"Error updating data: {err}")
            return False
        finally:
            cursor.close()

    def delete(self, table, condition):
        query = f"DELETE FROM {table} WHERE {condition}"
        cursor = self.connection.cursor()
        try:
            cursor.execute(query)
            self.connection.commit()
            return True
        except psycopg2.Error as err:
            self.connection.rollback()
            print(f"Error deleting data: {err}")
            return False
        finally:
            cursor.close()

    def query(self, query):
        cursor = self.connection.cursor()
        try:
            cursor.execute(query)
            results = cursor.fetchall()
            return results
        except psycopg2.Error as err:
            print(f"Error querying data: {err}")
            return None
        finally:
            cursor.close()

db = PostgreSQLDB('localhost', 5432, 'your_user', 'your_password', 'your_database')

if db.connect():
    # 批量插入数据
    columns = ['name', 'age']
    data_list = [('John', 25), ('Alice', 30)]
    if db.insert_batch('your_table', columns, data_list):
        print("Batch data inserted successfully")

    # 更新数据
    set_values = {'age': 35}
    condition = "name = 'John'"
    if db.update('your_table', set_values, condition):
        print("Data updated successfully")

    # 删除数据
    condition = "age < 18"
    if db.delete('your_table', condition):
        print("Data deleted successfully")

    # 查询数据
    query = "SELECT * FROM your_table"
    results = db.query(query)
    if results:
        for row in results:
            print(row)

    db.close()
复制代码

 

posted @   tan_ai_kang  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示