|
import logging |
|
import time |
|
from util import config |
|
import pandas as pd |
|
|
|
|
|
class Postgres(object): |
|
def __init__(self, env, dbnm): |
|
self.config = config.init(env) |
|
self.conn = None |
|
self.dbnm = dbnm |
|
self.__open__() |
|
|
|
def __open__(self): |
|
import psycopg2 |
|
try: |
|
if self.conn: |
|
self.__close__() |
|
del self.conn |
|
except Exception as e: |
|
pass |
|
|
|
try: |
|
self.conn = psycopg2.connect(f"""dbname={self.dbnm} |
|
user={self.config.get('postgres_user')} |
|
password={self.config.get('postgres_password')} |
|
host={self.config.get('postgres_host')} |
|
port={self.config.get('postgres_port')}""") |
|
except Exception as e: |
|
logging.error( |
|
"Fail to connect %s " % |
|
self.config.get("pgdb_host") + str(e)) |
|
|
|
def __close__(self): |
|
try: |
|
self.conn.close() |
|
except Exception as e: |
|
logging.error( |
|
"Fail to close %s " % |
|
self.config.get("pgdb_host") + str(e)) |
|
|
|
def select(self, sql): |
|
for _ in range(10): |
|
try: |
|
return pd.read_sql(sql, self.conn) |
|
except Exception as e: |
|
logging.error(f"Fail to exec {sql} " + str(e)) |
|
self.__open__() |
|
time.sleep(1) |
|
|
|
return pd.DataFrame() |
|
|
|
def update(self, sql): |
|
for _ in range(10): |
|
try: |
|
cur = self.conn.cursor() |
|
cur.execute(sql) |
|
updated_rows = cur.rowcount |
|
self.conn.commit() |
|
cur.close() |
|
return updated_rows |
|
except Exception as e: |
|
logging.error(f"Fail to exec {sql} " + str(e)) |
|
self.__open__() |
|
time.sleep(1) |
|
return 0 |
|
|
|
|
|
if __name__ == "__main__": |
|
Postgres("infiniflow", "docgpt") |
|
|