在PyCharm中将格式化和高亮的多行文本(SQL)粘贴到字符串文字中。

3
在PyCharm中,是否有一种方法可以将多行文本(如SQL)粘贴到字符串字面值中?例如:
SELECT column1
     , column2
FROM table1
WHERE column3 IN
(
    SELECT TOP(1) column4
    FROM table2
    INNER JOIN table3
    ON table2.column1 = table3.column1
)

Into:

sql = (
    "SELECT column1"
    "     , column2"
    "FROM table1"
    "..."
)

最好告诉PyCharm这是SQL语言的文本,以便突出显示语法?


1
嗨Miro,我在我的答案中没有提到这一点,但是:您可以通过创建宏将模板+复制粘贴操作绑定在一起,从而形成一个单一的键盘快捷方式在此处查看示例。当我第一次编写答案时,我没有包含最后一步,因为在问题要求中不清楚是否也需要该功能。(无论如何,请告诉我,这样做只需要一个按键即可完成。PyCharm自动检测+自动纠正从复制粘贴中获取的内容目前尚未实现,需要进行实现。) - bad_coder
可能(需要一些努力)可以实现特定的意图。但我认为这不是一个总体实用的解决方案,因为它总是需要比宏+模板+快捷键解决方案更多的工作和点击。(我还认为这应该是一个单独的问题。) - bad_coder
3个回答

5

在PyCharm中,有没有一种方法可以将多行文本(SQL)粘贴到字符串文字中?

有。首先,您需要"创建一个代码模板", 然后您想要粘贴的正确函数是 clipboard()。 您可以通过转到屏幕截图中显示的 文件 > 设置 > 编辑器 > 代码模板 来执行此操作。

enter image description here

是的。您可以在代码段中使用"语言注入"来实现这一点。如果您已经像以下截图所示预配置了它,PyCharm应该会自动检测SQL并应用语法高亮。它可以在文件>设置>编辑器>意图中设置。

enter image description here

如果您没有设置自动检测的意图,也可以通过右键单击并选择“显示上下文操作”或在代码中按下灯泡来手动执行此操作(将SQL代码放入字符串中可以更轻松地完成此操作)。

enter image description here

选择您喜欢的SQL方言后,您还可以微调注入语言的语法高亮和语法检查。
功能 | IDE对话框路径 ---|--- 语法检查 | Settings > Editor > Inspections > SQL 语法高亮 | Settings > Editor > Color Sheme > SQL

1
太棒了,谢谢。我已经将“highlighted”添加到问题标题中,因为这也是我写“formatted”的意思。只需复制/粘贴并在PyCharm中查看,就像在SQL客户端中一样。 - Miro
我在“设置>编辑器>检查”和“设置>编辑器>颜色方案>SQL”中完全找不到SQL,因此在“注入语言或引用”的选项中根本没有该选项。这只是专业版功能,社区版不可用吗?我可以通过某种方式添加它吗? - Miro
好的,这是PyCharm专业版的一部分,作为数据库工具和SQL插件的一部分。 - Miro
1
@Miro 哎呀。有很多专门针对社区版的SQL插件,可能会增加这个功能。我真的不知道该推荐哪一个,但至少我的答案解决了普通专业版的问题,并展示了前进的方向。我认为你很可能会找到一个完全符合这个需求的插件,因为SQL是如此普遍。 - bad_coder
@Miro 社区版是否有“意图(intentions)”和“语言注入(language injections)”的第一个链接?文档没有说明 它是专业版专属的。即使没有经过精细调整的检查和高亮,如果您拥有“语言注入”和“意图”,您应该能够获得某种类型的 SQL 默认值。 - bad_coder
是的,社区版有“注入语言或引用”,就像您的图片中显示的那样,只是没有SQL选项。我认为这些选项是从“设置>编辑器>检查”中提取的,其中没有SQL检查项目。但是,有一个复制/导入/导出配置文件的选项,因此肯定可以将其添加到配置文件或带有SQL检查的配置文件中进行导入。只是找不到任何开源的。 - Miro

3

对于多行SQL查询,在Python中,您可以使用三引号:

query = """
SELECT column1
     , column2
FROM table1
WHERE column3 IN
(
    SELECT TOP(1) column4
    FROM table2
    INNER JOIN table3
    ON table2.column1 = table3.column1
)
"""

然而,对于语法高亮来说,由于PyCharm是专为Python构建的,我认为您无法更改设置以像SQL一样进行突出显示。可能会有相应的扩展程序,但是我不知道有哪些。


1
谢谢,我当时搜索了很多,发现只有专业版才有插件:Database Tools and SQL https://www.jetbrains.com/help/pycharm/relational-databases.html - 这似乎对于仅仅高亮语法来说有点过度杀菜。 - Miro

1
使用""" """
sql = """
        SELECT column1
     , column2
FROM table1
WHERE column3 IN
(
    SELECT TOP(1) column4
    FROM table2
    INNER JOIN table3
    ON table2.column1 = table3.column1
)
"""

print(sql)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接