Python 使用psycopg2时如何使用多行f字符串

Python 使用psycopg2时如何使用多行f字符串,python,string,psycopg2,Python,String,Psycopg2,在使用psycopg2时,我尝试使用多行f字符串,如下所示: query = ( f"select tb.id" f"from someDB.tableA ta" f"inner join someDB.tableB tb on ta.url = tb.fk_url" f"where ta.name = '{some_name}'" f"and tb.type in ('{so

在使用psycopg2时,我尝试使用多行f字符串,如下所示:

query = (
            f"select tb.id"
            f"from someDB.tableA ta"
            f"inner join someDB.tableB tb on ta.url = tb.fk_url"
            f"where ta.name = '{some_name}'"
            f"and tb.type in ('{some_type}')"
            f"order by tb.id;"
        )
        cursor = connection.cursor()
        cursor.execute(query)
        cursor.fetchall()
我不断地发现这个错误:

psycopg2.errors.SyntaxError: syntax error at or near "."
LINE 1: select tb.idfrom someDB.tableA tainner join someDB.tableB...
有没有关于如何在psycopg2中使用多行f字符串的想法? 如果标准的多行代码也可以使用,我就不必使用f字符串。
如果可能的话,我更喜欢它。

就像多行字符串一样,只需在前面加一个f:

>>>foo='这是foo' >>>bar='这是bar' >>>长串=f ... foo值={foo} ... 条值={bar} ... >>>printlongstring foo value=这是foo bar值=这是bar
与多行字符串相同,只需在前面加一个f:

>>>foo='这是foo' >>>bar='这是bar' >>>长串=f ... foo值={foo} ... 条值={bar} ... >>>printlongstring foo value=这是foo bar值=这是bar
你有几个问题。第一个:字符串文本之间没有空格,因此列和from关键字集中在一起。但是,更大的问题是,尽管不能对SQL查询使用字符串格式。认真地不要这样做。使用参数化形式的execute。您将自己暴露在SQL注入问题上,也无法从数据库中更快的语句解析中获益。@deets可能正在制作一个硬编码的计划报告,该报告运行客户提供的SQL,因此不受SQL注入的约束。否则我当然同意。@reportgunner我会说坏习惯很少被选择性地应用。还有其他功能,如使用适当的datetime对象和执行计划,即使参数通过占位符更改,也可以始终获得相同的语句。因此,我将致力于养成使用参数化execute的习惯,而不是证明异常的合理性。当然,我试着删除这个问题。我发现这只是我的打字错误。但是系统不允许我。。。但正如@deets所指出的,是的。我需要在每个字符串文本后面加一个空格。谢谢你有几个问题。第一个:字符串文本之间没有空格,因此列和from关键字集中在一起。但是,更大的问题是,尽管不能对SQL查询使用字符串格式。认真地不要这样做。使用参数化形式的execute。您将自己暴露在SQL注入问题上,也无法从数据库中更快的语句解析中获益。@deets可能正在制作一个硬编码的计划报告,该报告运行客户提供的SQL,因此不受SQL注入的约束。否则我当然同意。@reportgunner我会说坏习惯很少被选择性地应用。还有其他功能,如使用适当的datetime对象和执行计划,即使参数通过占位符更改,也可以始终获得相同的语句。因此,我将致力于养成使用参数化execute的习惯,而不是证明异常的合理性。当然,我试着删除这个问题。我发现这只是我的打字错误。但是系统不允许我。。。但正如@deets所指出的,是的。我需要在每个字符串文本后面加一个空格。谢谢