我真的很喜欢 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支持沟通后,目前似乎没有办法做到这一点。
我已经向 DataGrip bug 跟踪器提交了功能请求(与数据库相关的内容由 DataGrip ream 处理),所以希望有一天它能得到修复
我有一个使用 PostgreSQL 和 Neo4j 的项目。我似乎没有任何方法可以说服 PyCharm 停止告诉我我的 Cypher 查询在语法上无效。
不烦人或任何事情。
我现在找到了一个很好的旁路。不确定它是否适合您,但它适用于 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}}{''}
"""