# -*- coding: utf-8 -*-

__author__ = 'wanger'
__date__ = '2024-08-20'
__copyright__ = '(C) 2024 by siwei'
__revision__ = '1.0'

import time
from typing import Optional
import os
import psycopg2
import uuid
import siwei_config


class PostgreSQL:
    # 用户表
    Sys_user = "sys_user"
    # 全局参数修改
    db_config = siwei_config.CONFIG['db']

    def __init__(
            self,
            host: Optional[str] = db_config['host'],  # default host during installation
            port: Optional[str] = db_config['port'],  # default port during pg installation
            user: Optional[str] = db_config['user'],  # default user during pg installation
            password: Optional[str] = db_config['password'],  # default password during pg installation
            dbname: Optional[str] = db_config['name'],  # default dbname during pg installation
            schema: Optional[str] = db_config['schema']
    ):
        # 配置数据库连接参数并指定schema
        self.connparams = {
            "dbname": dbname,
            "user": user,
            "password": password,
            "host": host,
            "port": port,
            "options": "-c search_path=otherSchema," + schema if schema is not None else None
        }
        self.conn = psycopg2.connect(**self.connparams)
        # 创建一个游标对象
        self.cur = self.conn.cursor()

    def execute(self, sql):
        # 执行一个查询
        self.cur.execute(sql)
        # 获取查询结果
        return self.cur.fetchall()

    def close(self):
        # 关闭游标和连接
        self.cur.close()
        self.conn.close()

    # 根据用户名查询密码
    def getPasswordByUsername(self, username):
        sql = "SELECT password FROM {}  t where t.user_name = '{}'".format(self.Sys_user, username)
        self.cur.execute(sql)
        rows = self.cur.fetchall()
        return rows

    # 判断数据是否为字符串
    def is_string(self, var):
        return isinstance(var, str)