PyCharm 2025.3 Help

虚拟外键

在某些情况下,您可能不希望使用显式定义的外键。 不使用外键的原因可能包括性能问题(在 CRUD 操作中)、数据库特性(诸如 ClickHouse 和 Apache Cassandra 等数据库不支持外键)、使用临时表(用于测试)、个人原因等。

在这种情况下,您仍然可以在不更改数据库代码的情况下创建外键关系。 为此,请使用 虚拟外键。 虚拟外键是 IDE 的虚拟对象。 与外键不同,虚拟外键不在数据库代码中定义。

请参考以下示例查询:

SELECT * FROM activity JOIN visitor ON visitor_id = visitor.id

假设数据库中未将 visitor_id 定义为外键。 在此 JOIN 子句中,您仍然可以使用 activity 表中的 visitor_id 字段与 visitor 表中的 id 字段之间的虚拟关系。 您可以 保存此关系 ,以便稍后使用,或在设置中使用正则表达式为虚拟外键 配置规则

虚拟外键

虚拟外键关系存储在 external-data-<data_source_name>.xml 中。 您可以为该 XML 文件选择其他名称和存储位置。 要更改或查看 XML 文档的路径,请按 Shift+Enter 打开数据源设置,点击 选项 选项卡并查看 虚拟对象和特性 字段。

可在 数据库 工具窗口中找到虚拟外键(虚拟外键)。

Database 中的虚拟外键

创建虚拟外键

  1. 数据库 工具窗口中,展开数据源树,直到表的节点。

  2. 右键点击该表节点并选择 新建 | 虚拟外键

  3. 在打开的 修改 对话框中,在 名称 字段中输入虚拟外键的名称。

  4. 目标表 窗格中,指定目标表的名称。

  5. 窗格中,点击 添加 按钮(Add 按钮)。

  6. 列名 字段中,指定子表中列的名称。

  7. 目标名称 字段中,指定目标表中列的名称。

  8. 点击 确定 以添加虚拟外键。

  9. 如果 保存 <data_source_name> 的外部数据 对话框打开,请为 external-data-<data_source_name>.xml 文件指定目录,然后点击 保存

在 Modify 对话框中创建虚拟外键
  1. 点击 ON 子句中的表关系,并按 Alt+Enter

  2. 选择 存储表关系

  3. 如果 保存 <data_source_name> 的外部数据 对话框打开,请为 external-data-<data_source_name>.xml 文件指定目录,然后点击 保存

存储表关系

为虚拟外键创建规则

您可以使用正则表达式创建一条规则,使 PyCharm 将一个表中的列指向另一个表中的列。

  1. 打开设置(Ctrl+Alt+S ),并导航到 数据库 | 其他

  2. 找到 虚拟外键 部分。

  3. 在表中,点击 添加 按钮(点击 Add 按钮)。

  4. 双击 列模式 单元格,并输入可匹配您想用作虚拟外键的列名的正则表达式。

  5. 双击 目标列模式 单元格,并输入替换模式。 替换模式使用来自 列模式 表达式的匹配项,并被解释为正则表达式。

    您可以使用 检查… 按钮(Check 按钮 )检查您的规则。 当您选择该规则并点击 检查… 按钮时,将打开 规则调试器 对话框。 您可以在 生成的模式 字段中看到结果。 在 生成的模式 字段生成的表达式必须与所需的 目标表.列 模式匹配。

    为虚拟外键创建规则

调试虚拟外键规则

  1. 打开设置(Ctrl+Alt+S ),并导航到 数据库 | 其他

  2. 找到 虚拟外键 部分。

  3. 选择该规则,然后点击 检查… 按钮(Check 按钮)。

  4. 规则调试器 对话框中,填写以下字段:

    • 列模式 :可匹配您想用作虚拟外键的列名的正则表达式。

      例如,要描述使用 _id 后缀的列,请使用 (.*)_(?i)id 正则表达式。 此正则表达式将找到类似 visitor_idvisitor_Id 的列,并将 visitors 捕获为第一个捕获组($1)。

    • 目标列模式 :使用 列模式 表达式的匹配项并被解释为正则表达式的替换模式。 您可以在 生成的模式 字段中看到结果。 请注意,仅当您在 源列 字段中给出列名示例时,结果才会出现。

      例如,我们可以使用来自 列模式 表达式的捕获组($1 ),再加上一个点(. )以及 id。 该表达式将生成 visitor.id 引用,我们可以将其用作主键。

      注意目标列模式 替换模式用于在 生成模式 字段中生成带有捕获组的正则表达式模式。 请确保对按字面量解释的符号进行双重转义,例如示例表达式中的点($1\\.(?i)id)。

    • 源列 :您想用作虚拟外键的列名示例。

    • 生成的模式 :用于与 目标表.列 名称匹配的生成的只读正则表达式模式。 生成的模式 是由 目标列模式 中的替换模式生成的结果。

    • 目标表.列 :将在 源列 中用作虚拟外键主键的表和列名示例。

    调试虚拟外键规则

在代码补全中显示虚拟外键

PyCharm 可以为 JOIN 语句生成可能的代码补全建议列表。 代码补全列表包括来自其他表的列建议,这些列与 JOIN 语句中该表的列同名。

例如,假设 actor 表具有以下列: actor_idfirst_namelast_namelast_update。 在建议列表中,您将看到来自其他表的、名称与这些列相同的可能补全项。

  1. Ctrl+Alt+S 打开设置,并导航到 编辑器 | 常规 | 代码补全

  2. 向下滚动到 SQL 部分,选择 根据名称匹配建议非严格外键

    基于名称匹配建议非严格外键已开启
    基于名称匹配建议非严格外键已关闭
最后修改日期: 2025年 12月 2日