簡體   English   中英

sqlalchemy聯合多個動態查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM