簡體   English   中英

如何獲取for循環以替換python中的T-SQL查詢中的這些單詞?

[英]How do I get my for loop to replace these words in a T-SQL query in python?

我對Python還是很陌生,每天都在學習新事物,但是盡管遇到了簡單的問題,但我仍然遇到一些無法在線找到答案的問題。

我只是試圖遍歷一個循環,所以我不必重復相同的多個查詢,每個查詢只用一個不同的詞。

我試過設置一個名為

assets = ["AT", "AST", "PAC", "AC"]

我嘗試使用

for i in range(4)
for i in assets

和更多示例,但我不斷收到錯誤無效的列名“ i”

這很明顯為什么,因為它沒有像我希望的那樣經過數組或向量。

assets = ["AT", "AST", "PAC", "AC"]
i = 0
for i in assets:

    q1 = """\
SELECT 'UnC' AS [i], SUM(CASE WHEN [i] IS NULL THEN 1 ELSE 0 END) AS [i 
Count]
    FROM SM.dbo.vSC SCL
        JOIN IP.dbo.vSLUN(3) S
            ON SCL.iSID=S.isID
        JOIN SMa.dbo.S_C SC(noLock) ON S.isID=SC.iSID
WHERE SC.bIsInA IS NULL AND [i] IS NULL"""

df1 = pd.read_sql(q1, conn)
print(df1)

我想實現運行4個不同的查詢,並在每個查詢完成存儲到變量后更改名稱,最終我希望為每個查詢打印出結果。 任何幫助,將不勝感激,謝謝。

例如,編寫您的查詢,例如:

q1 = """\

  SELECT *REPLACETHIS* FROM whatever;

然后說

for i in assets:
  print(q1.replace("*REPLACETHIS*", i))

希望這可以幫助

在Python中,您不能以您嘗試的方式插入字符串,特別是將值直接嵌入到另一個字符串主體中,這在其他語言(PHP,Perl等)中可能是可行的。

通常在Python中,使用占位符和綁定值。 雖然在Python(> = 2.6)中有多種插值字符串的方法,但首選的通用方法是str.format 由於您需要設置相同的值格式,因此請全部放置在第一個序數位置{0}

for i in assets: 
    q1 = """SELECT 'UnC' AS [{0}], SUM(CASE WHEN [{0}] IS NULL THEN 1 ELSE 0 END) AS [{0} Count]
            FROM SM.dbo.vSC SCL
            JOIN IP.dbo.vSLUN(3) S
                ON SCL.iSID = S.isID
            JOIN SMa.dbo.S_C SC(noLock) ON S.isID = SC.iSID
            WHERE SC.bIsInA IS NULL AND [{0}] IS NULL
         """

    q1 = q1.format(i)

    df1 = pd.read_sql(q1, conn)
assets = ["AT", "AST", "PAC", "AC"]

x = 0
for x in assets[0:4]:

    q1 = """\
SELECT 'Unc' AS [x], SUM(CASE WHEN [x] IS NULL THEN 1 ELSE 0 END) AS [x 
Count]
    FROM SM.dbo.vSC SCL
        JOIN IP.dbo.vSLUNode(3) S
            ON SCL.iSID=S.isID
        JOIN SM.dbo.S_C SC ON 
S.isID=SC.iSID
WHERE SC.bIIA IS NULL AND [x] IS NULL"""


print(q1.replace("x", x))






 assets = ["AT", "AST", "PAC", "AC"]


for i in assets[0:4]:

    q1 = """\
SELECT 'Unc' AS [{0}], SUM(CASE WHEN [{0}] IS NULL THEN 1 ELSE 0 END) AS [{0} Count]
    FROM SM.dbo.vSC SCL
        JOIN IP.dbo.vSLUNode(3) S
            ON SCL.iSID=S.isID
        JOIN SM.dbo.S_C SC ON 
S.isID=SC.iSID
WHERE SC.bIIA IS NULL AND [{0}] IS NULL"""


q1 = q1.format(i)
df1 = pd.read_sql(q1, conn)
print(df1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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