如何使用sqlalchemy获取表的主键、以及每一个字段名

使用sqlalchemy获取到的结果只包含数据,不包含字段,那么我们如何获取到对应字段呢?以及如何获取某张表的主键呢?

from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import MetaData, inspect, create_engine

engine = create_engine("postgresql://postgres:******@localhost:5432/postgres")
session = sessionmaker(bind=engine)()

# 将数据库的表反射出来
metadata = MetaData(bind=engine)
metadata.reflect(bind=engine, schema="anime", only=["overwatch"])
Base = automap_base(metadata=metadata)
Base.prepare()

# ow就是overwatch表对应的内
ow = getattr(Base.classes, "overwatch")

# 获取主键
primary_key = inspect(ow).primary_key

print(primary_key)  # (Column('id', INTEGER(), table=<overwatch>, primary_key=True, nullable=False),)
# 由于会有多个主键,所以是一个序列。这里我们只有一个主键,所以取第一个,然后拿到名字
print(primary_key[0].name)  # id

# 如何获取字段名呢?
res = session.query(ow).selectable.columns
print(res)
"""
['anime_overwatch_id', 'anime_overwatch_name', 'anime_overwatch_age',
'anime_overwatch_hp', 'anime_overwatch_attack', 'anime_overwatch_role',
'anime_overwatch_ultimate', 'anime_overwatch_country']
"""
# 可以看到,会自动将schema、table_name、column用_进行拼接,准确的说这不是字段名,而是在查询字段的时候起的别名
# 对于单表来说,也可以得出字段名,直接以最后一个下划线进行分割,然后取最后一个元素即可
# 记得要转化成str类型
print([str(r).rsplit("_")[-1] for r in res])  # ['id', 'name', 'age', 'hp', 'attack', 'role', 'ultimate', 'country']

原文地址:https://www.cnblogs.com/traditional/p/11505189.html

时间: 2024-08-02 22:58:31

如何使用sqlalchemy获取表的主键、以及每一个字段名的相关文章

oracle 如何获取表的主键列名,如何获取表的所有列名

获取表的主键列名 SQL  select   *   from   user_cons_columns     where   constraint_name   =   (select   constraint_name   from   user_constraints                 where   table_name   =   'BST_FAVORITE'  and   constraint_type   ='P'); 记住:表名要大写执行试试,该表所有主键都查出来了

Oracle 获取表的主键、外键以及唯一约束条件

Oracle 获取表的主键.外键以及唯一约束条件 Select a.Owner 主键拥有者, a.table_name 主键表, b.Column_Name 主键列, b.Constraint_Name 主键名 From user_Constraints a, user_Cons_Columns b Where a.Constraint_Type = 'P' --P-主键:R-外键:U-唯一约束 and a.Constraint_Name = b.Constraint_Name And a.Ow

JDBC获取表的主键

案例,创建订单,并根据订单号向订单明细表插入数据 sql语句: 创建两表 create table orders(  id number(4) primary key,  customer varchar2(20) not null,  orderdate date default sysdate); create table orderDetails(  id number(4) primary key,  order_id number(4),  product varchar2(50) n

MySQL获取其他表的主键

通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键.本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2.0提供的insertRow()方式 通过JDBC3.0提供的getGeneratedKeys()方式 通过SQL select LAST_INSERT_ID()函数 通过SQL @@IDENTITY 变量 1. 通过JDBC2.0提供的insertRow()方式 自jdbc2.0以来,可以通过下面的方式

mybatis 添加事物后 无法获取自增主键的问题

检查代码后没发现mapper文件设置自增主键返回的问题,后来检查到,关闭事务后,执行完是可以获取返回的主键的, 我在mysql的客户端里关闭自动提交,发现使用select last_insert_id() 也是可以正确获取最新主键的, 我意识到可能是mybatis配置的问题. 问同事后发现了问题,将 defaultExecutorType 从 BATCH 改为 SIMPLE 即可. 1 <?xml version="1.0" encoding="UTF-8"

Oracle使用游标为所有用户表添加主键语句

应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在ID字段,则判断是否是整形,如果不是就重命名字段为[表名ID],然后新增ID,如果不存在则直接添加自增一ID的主键 操作说明:打开PQSQL连接数据库后直接执行下面的详细脚本代码运行即可,脚本有风险(会删除原来的索引跟主键约束),请不要轻易在正式运行的数据库上直接执行 --Oracle使用游标为所有用

ORACLE: 查询(看)表的主键、外键、唯一性约束和索引

ORACLE: 查询(看)表的主键.外键.唯一性约束和索引 1.查找表的所有索引(包括索引名,类型,构成列) select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 表名 2.查找表的主键(包括名称,构成列): select cu.* from user_co

(转)MYSQL获取自增主键【4种方法】

通过JDBC2.0提供的insertRow()方式 通过JDBC3.0提供的getGeneratedKeys()方式 通过SQL select LAST_INSERT_ID()函数 通过SQL @@IDENTITY 变量 1. 通过JDBC2.0提供的insertRow()方式 自jdbc2.0以来,可以通过下面的方式执行. [java] view plain copy print? Statement stmt = null; ResultSet rs = null; try { stmt =

SQL SERVER获得指定表的主键

有时候要获得表主键字段,虽然系统自带有存储过程可以获得,但是对于熟悉系统表的话,自己写个也很容易. 2 Declare @table_name varchar(100) 3 Set @table_name='table_Pqs' 4 --1.可以根据系统存储过程 5 Execute sp_pkeys @table_name 6 7 --2.根据系统表获得 8 Declare @objectid int 9 Set @objectid=object_id(@table_name) 10 Selec