如何摆脱F弦中的空格?

时间:2019-02-16 16:17:42

标签: python

我有一个带if语句的f字符串,但是当我将value设置为false时,它是否留有空格?这就是我所拥有的。

from sqlalchemy.schema import DDLElement
from sqlalchemy.sql import table
from sqlalchemy.ext import compiler


class CreateView(DDLElement):
    def __init__(self, name, selectable, replace=True):
        self.name = name
        self.selectable = selectable
        self.replace = replace


@compiler.compiles(CreateView)
def complile_create_view(element, compiler, **kwargs):
    replace_text = "OR REPLACE"
    return (
        f"""CREATE {replace_text if element.replace else ''} VIEW {element.name} """
        f"""AS {compiler.sql_compiler.process(element.selectable, literal_binds=True)}"""
    )

要在我的终端中对此进行测试,

from sqlalchemy import text
view_query = text("SELECT * FROM my_table")
create_view = CreateView('my_view', view_query, replace=False)
In [62]: print(str(create_view.compile()))
CREATE  VIEW my_view AS SELECT * FROM my_table

如果我设置replace = True,则我的DDL很好。如何摆脱CREATE和VIEW之间的多余空间?

2 个答案:

答案 0 :(得分:0)

我可以想到两种选择:

第一种选择是从字符串中删除空格并将其添加到替换字符串中:

f"CREATE{' ' + replace_text if element.replace else ''} VIEW {element.name}"

显然有点丑陋。或在格式化后在两个空格之间加一个空格:

f"CREATE {replace_text if element.replace else ''} VIEW {element.name}".replace('  ', ' ')

答案 1 :(得分:0)

这是在您不使用replace_text时发生的,因此只需将空格移至其值并将else更改为输出空格而不是空即可。

@compiler.compiles(CreateView)
def complile_create_view(element, compiler, **kwargs):
    replace_text = " OR REPLACE "
    return (
        f"""CREATE{replace_text if element.replace else ' '}VIEW {element.name} """
        f"""AS {compiler.sql_compiler.process(element.selectable, literal_binds=True)}"""
    )