如何检查密钥是否为主psycopg2

时间:2013-10-23 21:00:59

标签: python postgresql psycopg2

我有一个更新脚本,它接受一些参数,其中一个参数是用于标识正确行的主键元组。但是,我不检查以确保密钥在我的代码中是主要的,我想。我不想让任何人实现脚本。如果我必须运行额外的查询,这很好,我只想在代码中向前移动之前检查此元组中的每个键是否为主键。谢谢!

编辑:(增加一些清晰度)。所以,想象一下我有一个脚本,它接受一个表名和一个键列表。我想检查这些键中的每一个都是给定表中的主键。

2 个答案:

答案 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           │
└─────────────┘