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