python - 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() 获得属性。我在列表“行”中有属性。那么,我如何评估表达式
解决方案
一种选择是查询您需要的列,然后在客户端使用 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"]
推荐阅读
- php - Vuejs2 - 如何使用 $(this).val()
- uwp - Windows ML - ONNX - HRESULT 异常:0x88900105
- java - Java JNA - 检测注册表值何时更改
- python - 没有scapy模块的python dns嗅探器
- android - FusedLocationProvider 返回 null
- asp.net-core - Visual Studio 2017 显示 Blazor 错误但编译
- php - 克隆 Laravel 项目并安装 composer 和 npm 然后也给我错误 500 page not found
- pyspark - Apache Zeppelin Spark java.lang.NoSuchMethodError: io/netty/buffer/PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric;
- excel - 使用样式将 TypeScript 导出到 Excel
- angularjs - angularJS 过滤器和 $http