我有一个简单的 web2py 服务器,我们用它来可视化来自 PostgreSQL 服务器的数据。以下函数都是 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