我正在使用 Sqlalchemy 的核心,所以我没有像在其他类似问题中那样使用声明性基类。如何使用引擎获取表的主键?
所以,我遇到了同样的问题。您需要创建一个 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
Run Code Online (Sandbox Code Playgroud)
上面的 Table 结构可用于许多不同的功能。我经常使用它来管理地理空间表,因为我不太喜欢现有的任何软件包。
在您的评论中,您提到您没有定义表......我认为这意味着您没有创建表的 sqlalchemy 模型。使用上述方法,您不需要这样做,并且可以以更动态的方式从表中收集各种信息。如果您将他人的杂乱数据库交给您,则特别有用!
希望有帮助。
小智 5
我想发表评论,但我没有足够的声誉。
基于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)
Run Code Online (Sandbox Code Playgroud)
[0] 并不总是 PK,仅当 PK 只有一列时。table.primary_key.columns.values() 是一个列表。为了获得多列 pk 的所有列,您可以使用:
primaryKeyColNames = [pk_column.name for pk_column in table.primary_key.columns.values()]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5139 次 |
| 最近记录: |