- 免责声明,我非常清楚有一个更好的方式来表达这个问题,如果有人想建议一个更好的方式,我很乐意改变它 *
过去4年我一直在使用DynamoDB,现在我正在将我的一个表切换到PostgreSQL。我一直在使用psycopg2 python库来测试一些查询。用户将需要对数据库进行过滤,所以有一个全在一个过滤器查询会很好。
我希望用户能够为给定的过滤器选择多个值,或者不选择任何值,如果选择“无”,则该字段不应被过滤。下面是一个基本的查询可能的样子(这只是一个可以完成提出我的问题的示例)。
conn = psycopg2.connect(host=ENDPOINT, port=PORT, database=DBNAME, user=USER, password=PASSWORD, sslrootcert="SSLCERTIFICATE")
cur = conn.cursor()
sql = """
SELECT * FROM table_name
WHERE column_1 in %s AND column_2 in %s
ORDER BY datetime DESC
"""
sql_values = (("XXXXYXY", "XXXYYXXY"), ("ZGZGZGZGGG","GZGGGGZGG"))
cur.execute(sql, sql_values)
下面是column_2没有值的查询类型:
conn = psycopg2.connect(host=ENDPOINT, port=PORT, database=DBNAME, user=USER, password=PASSWORD, sslrootcert="SSLCERTIFICATE")
cur = conn.cursor()
sql = """
SELECT * FROM table_name
WHERE column_1 in %s AND column_2 in %s
ORDER BY datetime DESC
"""
sql_values = (("XXXXYXY", "XXXYYXXY"), ())
cur.execute(sql, sql_values)
显然,这是行不通的。简而言之,我希望它只查询那些有数据的列。实现这一点最有效的方法是什么?
1条答案
按热度按时间gcuhipw91#
下面演示如何动态生成查询:
输出: