我正在使用Sqlalchemy的核心,因此我没有像其他类似问题那样使用声明性基类。 如何使用引擎获取表的主键?
答案 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模型。使用上述方法,您不需要这样做,并且可以以更动态的方式从表中收集各种信息。如果你被交给其他人的凌乱数据库,特别有用!
希望有所帮助。