如何在数据库级别获取 primary_key 的列名?
How to get column name for primary_key at database level?
我需要在数据库级别获取包含主键的列名。
Model.primary_key
returns models_id
列名称 不是 数据库级别的主键。无论如何,我无法更改迁移或修改 tables。
我目前可以使用 ActiveRecord::Base.connection.primary_key('table_name')
通过 MySqlAdapter 获取它
但这不适用于具有复合主键的 table。如果 table 包含复合主键它 returns nil
.
有什么方法可以通过编程实现吗?
ActiveRecord 不支持开箱即用的复合主键。
您需要安装 composite_primary_keys gem,然后 ActiveRecord::Base.connection.primary_key('table_name')
将 return 列名数组(如果主键是复合键)。
执行查询:
SHOW COLUMNS FROM table_name;
然后查看返回的所有行,其中名为 KEY 的列的值为 'PRI'。然后 Field 列将为您提供 table 中构成 table 主键一部分的列名称。
或者:
SELECT COLUMN_NAME FROM information_schema
WHERE TABLE_SCHEMA='database_name'
AND TABLE_NAME = 'table_name'
AND COLUMN_KEY = 'PRI';
我需要在数据库级别获取包含主键的列名。
Model.primary_key
returns models_id
列名称 不是 数据库级别的主键。无论如何,我无法更改迁移或修改 tables。
我目前可以使用 ActiveRecord::Base.connection.primary_key('table_name')
但这不适用于具有复合主键的 table。如果 table 包含复合主键它 returns nil
.
有什么方法可以通过编程实现吗?
ActiveRecord 不支持开箱即用的复合主键。
您需要安装 composite_primary_keys gem,然后 ActiveRecord::Base.connection.primary_key('table_name')
将 return 列名数组(如果主键是复合键)。
执行查询:
SHOW COLUMNS FROM table_name;
然后查看返回的所有行,其中名为 KEY 的列的值为 'PRI'。然后 Field 列将为您提供 table 中构成 table 主键一部分的列名称。
或者:
SELECT COLUMN_NAME FROM information_schema WHERE TABLE_SCHEMA='database_name' AND TABLE_NAME = 'table_name' AND COLUMN_KEY = 'PRI';