如何使用sqlalchemy获取表的主键、以及每一个字段名和对应类型
使用sqlalchemy获取到的结果只包含数据,不包含字段,那么我们如何获取到对应字段和其属性呢?以及如何获取某张表的主键呢?
# -*- coding:utf-8 -*-
# @Author: WanMingZhu
# @Date: 2019/9/11 10:38
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import MetaData, inspect, create_engine
engine = create_engine("postgresql://postgres:zgghyys123@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
# 那么如何拿到表的所有字段名呢?
print(inspect(ow).c.keys()) # ['id', 'name', 'age', 'hp', 'attack', 'role', 'ultimate', 'country']
# 那如何拿到字段的类型呢?
columns = inspect(ow).columns
print(list(columns))
"""
[Column('id', INTEGER(), table=<overwatch>, primary_key=True, nullable=False),
Column('name', VARCHAR(length=255), table=<overwatch>, nullable=False),
Column('age', INTEGER(), table=<overwatch>), Column('hp', INTEGER(), table=<overwatch>),
Column('attack', VARCHAR(length=255), table=<overwatch>),
Column('role', VARCHAR(length=255), table=<overwatch>),
Column('ultimate', VARCHAR(length=255), table=<overwatch>),
Column('country', VARCHAR(), table=<overwatch>)]
"""
# 以上便是每一个字段的属性组成的列表,每一个元素都是<class 'sqlalchemy.sql.schema.Column'>类型
# 那么我们便可以拿到相应的属性
for col_attr in columns:
print(f"字段名:{col_attr.name},"
f"是否为主键:{col_attr.primary_key},"
f"字段类型:{str(col_attr.type)},"
f"是否允许非空:{col_attr.nullable}",
f"注释:{col_attr.comment}")
"""
字段名:id,是否为主键:True,字段类型:INTEGER,是否允许非空:False 注释:英雄的id
字段名:name,是否为主键:False,字段类型:VARCHAR(50),是否允许非空:False 注释:英雄的姓名
字段名:age,是否为主键:False,字段类型:INTEGER,是否允许非空:True 注释:英雄的年龄
字段名:hp,是否为主键:False,字段类型:INTEGER,是否允许非空:True 注释:英雄的血量
字段名:attack,是否为主键:False,字段类型:VARCHAR(255),是否允许非空:True 注释:攻击类型
字段名:role,是否为主键:False,字段类型:VARCHAR(255),是否允许非空:True 注释:英雄定位
字段名:ultimate,是否为主键:False,字段类型:VARCHAR(255),是否允许非空:True 注释:终极技能
字段名:country,是否为主键:False,字段类型:TEXT,是否允许非空:True 注释:英雄的国籍
"""
如何使用sqlalchemy获取表的主键、以及每一个字段名和对应类型的更多相关文章
- JDBC获取表的主键
JDBC获取表的主键 案例,创建订单,并根据订单号向订单明细表插入数据 sql语句: 创建两表 create table orders( id number(4) primary key, cus ...
- Oracle 获取表的主键、外键以及唯一约束条件
Oracle 获取表的主键.外键以及唯一约束条件 Select a.Owner 主键拥有者, a.table_name 主键表, b.Column_Name 主键列, b.Constraint_Nam ...
- 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类
http://www.cnblogs.com/lbangel/p/3487796.html 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的 ...
- 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句
最近在写Rafy底层的一些东西,在数据库方面把MySql数据库集成到里面去,里面有一个需求,需要获取非系统数据库,也就是我们自己建立的数据库中所有表的主键和外键元数据列表. 第一种方法:是网上的方法, ...
- mybatis 添加事物后 无法获取自增主键的问题
检查代码后没发现mapper文件设置自增主键返回的问题,后来检查到,关闭事务后,执行完是可以获取返回的主键的, 我在mysql的客户端里关闭自动提交,发现使用select last_insert_id ...
- 【JAVA - SSM】之MyBatis插入数据后获取自增主键
很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: (1)先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段 ...
- MYSQL获取自增主键【4种方法】
通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键.本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2.0提 ...
- Oracle使用游标为所有用户表添加主键语句
应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在I ...
- mybatis框架(6)---mybatis插入数据后获取自增主键
mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...
随机推荐
- spring整合mybatis(代理的方式)【我】
创建项目等同上一篇非代理方式随笔,只说不一样的部分: 项目结构主要是多了下面红框部分: 配置文件: 主要是dao配置文件中多了Mapper代理java类的扫描包路径: applicationConte ...
- 关于web技术的一些见解
在目前的软件技术领域中,互联网方面的技术是其中最热门的一部分.现在做一个普通的网站,就涉及到大部分的web技术了:前端展示,后端数据处理,功能模块等.我觉得,也就分两个部分的技术:前端,后端. 前端, ...
- etcd安全集群三节点扩容至四个节点
规划:先安装三台组建集群,然后扩容一个安全节点进来 .环境: 三台centos7. 主机 192.168.0.91 192.168.0.92 192.168.0.93 都关闭防火墙 都关闭selinu ...
- ubuntu安装软件失败,出现404错误,更新软件源
更新源方法 备份原来的源 首先备份原来的源,用来出错后进行恢复 sudo cp /etc/apt/sources.list/etc/apt/sources.list_backup 1 如果更新源后出错 ...
- Linux-把任务放到后台
公司用的服务器,只能ssh远程操作,每天都会自动退出账户,不知道怎么回事儿,很郁闷.所以每天早起重新登录后发现进程已经关闭了,因为你运行的任务是和terminal关联在一起的,terminal关闭后, ...
- 微信路由navigateTo
// pages/index/index.js Page({ /** * 页面的初始数据 */ data: { res:2 }, search: function(e) { var that = th ...
- [c++] SYSTEM_INFO
SYSTEM_INFO,Win32 API函数GetSystemInfo所使用的结构体. 说明 SYSTEM_INFO结构体包含了当前计算机的信息.这个信息包括计算机的体系结构.中央处理器的类型.系统 ...
- delete an extra edge from BST
Given a BST, remove an extra edge to make it BST. 7 / \ 5 9 / \ / 3 8 public void deleteEdge(T ...
- reduce的使用
reduce的使用:https://blog.csdn.net/xiasohuai/article/details/82152432
- 设计模式在 Spring 框架中的良好应用
在开始正文之前,请你先思考几个问题: 你项目中有使用哪些 GOF 设计模式 说一说 GOF 23 种设计模式的设计理念 说说 Spring 框架中如何实现设计模式 假设我是面试官问起了你这些面试题,你 ...