首页 > 解决方案 > python中的动态数据库操作

问题描述

我在 postgres 中有一个名为“VAS_QI”的表,其中包含以下示例数据。

IP,IN_SOCKET,OUT_SOCKET,IN_THRES,OUT_THRES,PACKETS

56.33.43.56,1,2,1,1,1

56.33.43.56,1,1,1,1,1

使用 python,我想定义一个函数,它读取变量参数并接受字符串表达式的输入并相应地给出输出:

expression_val("IN_SOCKET","OUT_SOCKET","IN_THRES",exp="(IN_SOCKET+OUT_SOCKET)/(IN_THRES)")

那么这应该评估为低于 2 行

3

2

我使用 psycopg2 来读取 postgres 并读取变量。但停留在我必须评估表达式的部分。

def expression_val(*k,exp):
  val = ""
  for i in k:
    val = val + i + ","
  str1 = val[:-1]
  sec = "SELECT {} from VAS_QI ".format(str1)
  conn = psycopg2.connect()
  cur - conn.cursor
  cur.execute(sec)
  rows = cur.fetchall()

当我运行代码时。它只从数据库中获取属性。但是我无法使用属性评估表达式,因为表达式是动态的。必须为每一行评估表达式并在新列“EXPRESSION_VALUE”下更新

一旦我从 cur.fetchall() 获得属性。我在列表“行”中有属性。那么,我如何评估表达式

标签: python

解决方案


一种选择是查询您需要的列,然后在客户端使用 pandas 来评估表达式。这不是您想要的,但应该很容易修改。

import psycopg2
import pandas as pd


def query():
    query = """
        SELECT IN_SOCKET,OUT_SOCKET,IN_THRES from VAS_QI
    """
    with psycopg2.connect() as db:   
        df = pd.read_sql_query(query, db)
        return df

df = query()
df["exp"] = (df["IN_SOCKET"] + df["OUT_SOCKET"]) / df["IN_THRES"]

推荐阅读