
[英]python flask API module how to pass a dynamic parameter to a decorator
[英]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.