小编Jen*_*obi的帖子

使用FastAPI + Sqlalchemy正确刷新数据库连接池

目前正在使用 sqlalchemy 和 fastapi 作为 AWS 中托管的生产微服务。问题是我们的生产数据库机密每 30 天刷新一次。尝试从机密管理器自动获取新机密,以便在 sqlalchemy 出现错误或操作错误时重新初始化数据库引擎和会话。我的问题是这种“重新初始化”应该发生在哪里?

utils/secret_mgr.py

import json
import logging

import boto3
from botocore.exceptions import ClientError


def get_secret(secret_id):
    session = boto3.client('secretsmanager', region_name='us-east-1')
    try:
        response = session.get_secret_value(SecretId=secret_id)
    except ClientError as e:
        code = e.response['Error']['Code']
        logging.exception(f'error:get_secret error_code:{code}')
        raise e
    else:
        secret_str = response['SecretString']
        secret = json.loads(secret_str)
    return secret

Run Code Online (Sandbox Code Playgroud)

实用程序/db.py

import logging
import os

from sqlalchemy.pool import QueuePool
from sqlalchemy.sql import text
from sqlmodel import SQLModel, Session, create_engine
from sqlalchemy.exc import OperationalError
from api.utils.scemgr import get_secret

engine …
Run Code Online (Sandbox Code Playgroud)

python database sqlalchemy python-3.x fastapi

5
推荐指数
0
解决办法
3184
查看次数

将函数快速应用到 Polars Dataframe

将函数应用于极坐标数据帧pl.DataFrame或极坐标数据帧的最快方法是什么pl.internals.lazy_frame.LazyFrame这个问题是对 Polars-DataFrame 的所有列应用函数的附带条件

我正在尝试使用 python 标准库中的 hashlib 连接所有列并散列值。我正在使用的功能如下:

import hashlib

def hash_row(row):
    os.environ['PYTHONHASHSEED'] = "0"
    row = str(row).encode('utf-8')
    return hashlib.sha256(row).hexdigest()

Run Code Online (Sandbox Code Playgroud)

然而,鉴于此函数需要一个字符串作为输入,这意味着此函数需要应用于 pl.Series 中的每个单元格。处理少量数据应该没问题,但是当我们的行数接近 100m 时,这就变得非常有问题。该主题的问题是我们如何才能在整个 Polars 系列中以最高性能的方式应用这样的函数?

熊猫

提供了一些创建新列的选项,其中一些比其他列性能更高。

df['new_col'] = df['some_col'] * 100 # vectorized calls

Run Code Online (Sandbox Code Playgroud)

另一种选择是为行操作创建自定义函数。

def apply_func(row):
   return row['some_col'] + row['another_col']

df['new_col'] = df.apply(lambda row: apply_func(row), axis=1) # using apply operations
Run Code Online (Sandbox Code Playgroud)

根据我的经验,最快的方法是创建 numpy 矢量化解决方案。

import numpy as np

def np_func(some_col, another_col):
   return some_col + another_col

vec_func = np.vectorize(np_func)

df['new_col'] = vec_func(df['some_col'].values, …
Run Code Online (Sandbox Code Playgroud)

rust-polars python-polars

4
推荐指数
1
解决办法
7570
查看次数