3

PostgreSQL サーバーからのデータを視覚化するために使用する単純な web2py サーバーがあります。以下の関数はすべて web2py のグローバル モデルの一部です。

データを取得するための現在のソリューションは非常に単純です。接続するたびに、データを取得した後、接続を閉じます。

# Old way:
# (imports excluded)  
def get_data(query):
    postgres_connection = psycopg2.connect("credentials")
    df = psql.frame_query(query, con=postgres_connection) # Pandas function to put data from query into DataFrame
    postgres.close()
    return df

小規模なクエリの場合、接続の開始と終了には、関数の実行時間の約 9/10 がかかります。

これは代わりにそれを行う良い方法ですか?そうでない場合、より良い方法は何ですか?

# Better way?
def connect():
    """
    Create a connection to server.
    """
    return psycopg2.connect("credentials")

db_connection = connect()

def create_pandas_frame(query):
    """
    Get query if connection is open.
    """
    return psql.frame_query(query, con=db_connection)    

def get_data(query):
    """
    Try to get data, open a new conneciton if connection is closed.
    """
    try:
        data = create_pandas_frame(query)
    except:
        global db_connection
        db_connection = connect()
        data = create_pandas_frame(query)
    return data
4

2 に答える 2