从sqlalchemy(Core)中的表中获取主键列名称

时间:2017-05-20 18:26:05

标签: python sqlalchemy

我正在使用Sqlalchemy的核心,因此我没有像其他类似问题那样使用声明性基类。 如何使用引擎获取表的主键?

2 个答案:

答案 0 :(得分:4)

我想发表评论,但我没有足够的声誉。

greenbergé 答案为基础:

from sqlalchemy import create_engine, Table, MetaData

dbUrl = 'postgres://localhost:5432/databaseName'   #will be different for different db's

engine = create_engine(dbUrl)
meta = MetaData()

table = Table('tableName', meta, autoload=True, autoload_with=engine)

[0] 并不总是 PK,仅当 PK 只有一列时。 table.primary_key.columns.values() 是一个列表。 为了获得多列 pk 的所有列,您可以使用:

primaryKeyColNames = [pk_column.name for pk_column in table.primary_key.columns.values()]

答案 1 :(得分:2)

所以,我刚遇到同样的问题。您需要创建一个Table对象,该对象反映您要查找主键的表。

from sqlalchemy import create_engine, Table, MetaData

dbUrl = 'postgres://localhost:5432/databaseName'   #will be different for different db's

engine = create_engine(dbUrl)
meta = MetaData()

table = Table('tableName', meta, autoload=True, autoload_with=engine)

primaryKeyColName = table.primary_key.columns.values()[0].name

上面的表构造对许多不同的功能都很有用。我使用它来管理地理空间表,因为我不喜欢任何当前的包。

在你的评论中你提到你没有定义一个表...我认为这意味着你没有创建表的sqlalchemy模型。使用上述方法,您不需要这样做,并且可以以更动态的方式从表中收集各种信息。如果你被交给其他人的凌乱数据库,特别有用!

希望有所帮助。