[英]sqlalchemy union multiple dynamic queries
我正在動態創建原始文本 SQL 查詢,如下所示:
# my_items is a list of dicts.
# Each dict has keys, col_1 and col_2, with different values.
for col_values in my_items:
sql = sqlalchemy.text(
"SELECT col_1, col_2
FROM my_table WHERE col_1 = :col_1 AND col_2 = :col_2")
result = conn.execute(sql, **col_values)
但是,上述方法效率不高,我想通過合並所有查詢來檢索所有數據:
queries = []
for col_values in my_items:
sql = sqlalchemy.text(
"SELECT col_1, col_2
FROM my_table WHERE col_1 = :col_1 AND col_2 = :col_2")
queries.append(sql)
final_sql = union(*queries) # does not work with Text objects
result = conn.execute(final_sql) # not sure how to bind params for individual items here!!
問題是,首先,我不能使用union
,因為它需要statements
而不是文本,其次,我不知道如何將各自的輸入參數綁定到它們的查詢。
您需要將參數綁定到使用text
創建的TextClause
並將其轉換為TextualSelect
。
queries = []
for col_values in my_items:
stmt = (
sqlalchemy.text(
"""
SELECT col_1, col_2
FROM my_table
WHERE col_1 = :col_1 AND col_2 = :col_2
"""
)
.bindparams(**col_values)
.columns(col_1=db.<TYPE>, col_2=db.<TYPE>)
)
queries.append(stmt)
final_stmt = union(*queries)
print(final_stmt.compile(compile_kwargs={"literal_binds": True}))
SELECT col_1, col_2
FROM my_table WHERE col_1 = 1 AND col_2 = 11
UNION ALL
SELECT col_1, col_2
FROM my_table WHERE col_1 = 3 AND col_2 = 13
UNION ALL
SELECT col_1, col_2
FROM my_table WHERE col_1 = 5 AND col_2 = 15
注意。 我沒有實際的數據或架構,所以我沒有運行它,如果有任何問題,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.