对一条语句禁用 PyCharm SQL 检查

问题描述 投票:0回答:3

我真的很喜欢 PyCharm 的 SQL 检查,它们非常有用并且提供了宝贵的见解。但它们不能很好地与

psycopg2
SQL 组合功能配合使用。我正在构建一个简单的查询来执行多行插入:

from psycopg2.sql import SQL, Placeholder, Literal

def build_materials_insert(model_id, materials):
    data = SQL(", ").join(
        SQL("({model_id}, {obj_name}, {material})").format(
            model_id=Literal(model_id),
            obj_name=Literal(mat["object"]),
            material=Literal(mat["material"])
        ) for mat in materials
    )

    return SQL("INSERT INTO materials(model_id, object, material)  VALUES {values}").format(values=data)

检查后,PyCharm 显示警告

'(' expected, got '{'
。从 SQL 的角度来看它是有效的,但在这里没有用,因为大括号中的文本只是一个格式占位符。

使用 Alt-Enter 显示建议仅提供“更改 SQL 方言”功能。

我通常可以禁用 SQL 语法检查,但我不想这样做,因为在其他地方它非常有用。我试图找到合适的禁用注释命令,但没有找到内置 SQL 的列表。

是否有某种方法可以禁用特定语句的 SQL 验证,因为我真的很喜欢让我的代码保留所有绿色检查结果?

pycharm ide
3个回答
0
投票

与PyCharm支持沟通后,目前似乎没有办法做到这一点。

我已经向 DataGrip bug 跟踪器提交了功能请求(与数据库相关的内容由 DataGrip ream 处理),所以希望有一天它能得到修复


0
投票

我有一个使用 PostgreSQL 和 Neo4j 的项目。我似乎没有任何方法可以说服 PyCharm 停止告诉我我的 Cypher 查询在语法上无效。

不烦人或任何事情。


0
投票

我现在找到了一个很好的旁路。不确定它是否适合您,但它适用于 SQL Server 方言。

例如我们有一个模板查询:

sql = """
    SELECT *
    FROM new_ids
    WHERE id = 1 {additional_condition}
"""

这里我们从 PyCharm 收到错误:COLLATE、COMPUTE、EXCEPT、FOR、GROUP、HAVING、INTERSECT、OPTION、ORDER 或 UNION 预期,得到 '{'

现在,如果我们将其设为 f 字符串并添加一个空块

{''}
,如下所示,PyCharm 的错误就会消失:

sql = f"""
    SELECT *
    FROM new_ids
    WHERE id = 1 {{additional_condition}}{''}
"""
© www.soinside.com 2019 - 2024. All rights reserved.