我有一个更新脚本,它接受一些参数,其中一个参数是用于标识正确行的主键元组。但是,我不检查以确保密钥在我的代码中是主要的,我想。我不想让任何人实现脚本。如果我必须运行额外的查询,这很好,我只想在代码中向前移动之前检查此元组中的每个键是否为主键。谢谢!
编辑:(增加一些清晰度)。所以,想象一下我有一个脚本,它接受一个表名和一个键列表。我想检查这些键中的每一个都是给定表中的主键。
答案 0 :(得分:2)
好吧,我找到了一个答案,也许不是最好的答案。我正在寻找某种函数/查询,它将返回一个布尔值,指示该键是否为primary_key。这样,我返回一个主键列表,并检查我的键是否在该列表中。
一些代码:
sql = "select indexdef from pg_indexes where tablename = '%s';" % (table,)
self.cursor.execute(sql)
rows = self.cursor.fetchall()
row = rows[0][0]
从那里,您可以根据需要剪切结果字符串。我基本上只是删除了无用的文本,直到我用逗号分隔我的主键并在其上做了一个string.split(“,”)。然后,你可以检查。
答案 1 :(得分:1)
找出表的主键列的一般方法,它应该适用于任何SQL数据库,如下所示:
SELECT column_name
FROM information_schema.table_constraints
JOIN information_schema.key_column_usage
USING (constraint_catalog, constraint_schema, constraint_name,
table_catalog, table_schema, table_name)
WHERE constraint_type = 'PRIMARY KEY'
AND (table_schema, table_name) = ('yourschema', 'yourtable')
ORDER BY ordinal_position;
返回类似
的内容┌─────────────┐
│ column_name │
├─────────────┤
│ a │
│ b │
└─────────────┘