簡體   English   中英

三引號內的 Python 參數

[英]Python arguments inside triple quotes

我有一個包含 sql 查詢的 python 腳本。 出於格式化目的,我在 sql 查詢周圍使用三重引號。 我想將從命令行填充的變量注入到查詢中。 如何在保留三重引號的同時做到這一點。 有沒有更好的方法來繞過三重引號?

前任:

AGE = raw_input("Enter your age: ")

vdf = vertica.select_dataframe("""
    Select
        col1
        col2
        coln
    FROM
        TableX
    WHERE
        col2 IN (21, 22, AGE)
    Group BY 1
""")

您可以使用如下格式

AGE = raw_input("Enter your age: ")
query_1 = """
    Select
        col1
        col2
        coln
    FROM
        TableX
    WHERE
        col2 IN (21, 22, {})
    Group BY 1
"""
vdf = vertica.select_dataframe(query_1.format(AGE))

一個帶有三重引號和多個賦值的簡單示例是:

>>> age = 100
>>> name = "koukouviou"
>>> """I am {} and I am {} years old""".format(name, age)
'I am koukouviou and I am 100 years old'

您可以將查詢字符串分開,並使用格式設置正確的年齡,例如:

a_query = """
    Select
        col1
        col2
        coln
    FROM
        TableX
    WHERE
        col2 IN (21, 22, {})
    Group BY 1
"""

vdf = vertica.select_dataframe(a_query.format(AGE))

我很驚訝,沒有提到神話般的%運算符,以字符串格式構建的python將使您的原始行進行微小的修改即可工作:

AGE = raw_input("Enter your age: ")

vdf = vertica.select_dataframe("""
    Select
        col1,
        col2,
        coln
    FROM
        TableX
    WHERE
        col2 IN (21, 22, %s)
    Group BY 1
""" % AGE)

這也適用於具有多個參數的查詢:

AGE = raw_input("Enter your age: ")
GENDER = raw_input("Enter your gender (m/f): ")
HEIGHT = raw_input("Enter your height in cm: ")

vdf = vertica.select_dataframe("""
    INSERT INTO stats (
        age,
        gender,
        height
    )
    VALUES
    (
        '%s',
        '%s',
        '%s'
    )
""" % ( AGE, GENDER, HEIGHT ))

我將再加上一個dict再加上一個答案,因為它使我的生活變得更加簡單。 使用@ hexerei-software的INSERT示例:

AGE = raw_input("Enter your age: ")
GENDER = raw_input("Enter your gender (m/f): ")
HEIGHT = raw_input("Enter your height in cm: ")

settings = {'AGE': AGE, 'GENDER': GENDER, 'HEIGHT': HEIGHT}

vdf = vertica.select_dataframe("""
    INSERT INTO stats (
        age,
        gender,
        height
    )
    VALUES
    (
        '{AGE}',
        '{GENDER}',
        '{HEIGHT}'
    )
""".format(**settings))

我更喜歡使用f-Strings

vdf = vertica.select_dataframe(f"""
    Select
        col1
        col2
        coln
    FROM
        TableX
    WHERE
        col2 IN (21, 22, {AGE})
    Group BY 1
""")

暫無
暫無

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

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