gpt4 book ai didi

python - web2py 网络服务器 - 保持与外部 SQL 服务器连接的最佳方式?

转载 作者:行者123 更新时间:2023-11-28 17:46:46 25 4
gpt4 key购买 nike

我有一个简单的 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

最佳答案

如果您在 web2py 模型文件中运行该代码,您最终会在每个 HTTP 请求上创建一个新连接。相反,您可能会考虑 connection pooling .

一个更简单的选择可能是使用 web2py DAL 来获取数据。像这样的东西:

from pandas.core.api import DataFrame
db = DAL([db connection string], pool_size=10, migrate_enabled=False)
rows = db.executesql(query)
data = DataFrame.from_records(rows, columns=[list, of, column, names])

如果您指定 pool_size DAL() 的参数,它将自动维护一个连接池以供跨请求使用。

注意,我还没有尝试过这个,所以它可能需要一些调整,但按照这些思路应该可以工作。

如果愿意,您甚至可以使用 DAL 通过定义数据库表模型来生成 SQL:

db.define_table('mytable',
Field('field1', 'integer'),
Field('field2', 'double'),
Field('field3', 'boolean'))

rows = db.executesql(db(db.mytable.id > 0)._select())
data = DataFrame.from_records(rows, columns=db.mytable.fields)

._select() 方法只是生成 SQL,而不实际执行选择。然后将 SQL 传递给 .executesql() 以获取数据。

另一种方法是创建一个特殊的 Pandas 处理器,并将其作为 processor 参数传递给 .select()

def pandas_processor(rows, fields, columns, cacheable):
return DataFrame.from_records(rows, columns=columns)

data = db(db.mytable.id > 0).select(processor=pandas_processor)

关于python - web2py 网络服务器 - 保持与外部 SQL 服务器连接的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17039699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com