繁体   English   中英

Python 中的 PostgeSQL 查询:如何传递动态参数?

[英]PostgeSQL query in Python : how to pass dynamic parameter?

我正在尝试在 Python 中创建动态 PostgreSQL 查询:

import psycopg2
import pandas as pd

V_ID=111

conn = psycopg2.connect(host="xxxx", port = 5432, database="xxxx", user="xxxxx", password="xxx")

df= pd.read_sql_query 
("""SELECT u.user_name, sum(s.sales_amount)
FROM public.users u left join public.sales s on u.id=s.user_id
WHERE USER_ID = v_ID
Group by u.user_name""",con=conn)
df.head()

当我设置固定 ID 时,查询运行良好,但如果我设置变量“V_ID”,则会出现错误。

请帮助我,如何在查询中正确放置变量...

您可以使用字符串格式来传递查询字符串中的值。 您可以在此处阅读有关字符串格式的更多信息: https://www.w3schools.com/python/ref_string_format.asp

v_ID = "v_id that you want to pass"

query = """SELECT u.user_name, sum(s.sales_amount)
FROM public.users u left join public.sales s on u.id=s.user_id
WHERE USER_ID = {v_ID}
Group by u.user_name""".format(v_ID=v_ID)

df= pd.read_sql_query(query ,con=conn)

正如@Adrian 在评论中提到的,字符串格式化不是正确的方法

更多详细信息: https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries

根据文档,参数可以是列表、元组或字典。

用于传递参数的语法取决于数据库驱动程序。 检查您的数据库驱动程序文档,了解 PEP 249 的 paramstyle 中描述的五种语法 styles 中的哪一种受支持。 例如。 对于 psycopg2,使用 %(name)s 所以使用 params={'name': 'value'}。

在 psycopg2 的情况下,您可以这样做。

v_ID = "v_id that you want to pass"

query = """SELECT u.user_name, sum(s.sales_amount)
FROM public.users u left join public.sales s on u.id=s.user_id
WHERE USER_ID = %(v_ID)s
Group by u.user_name"""

df= pd.read_sql_query(query ,con=conn, params={"v_ID":v_ID})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM