sqlalchemy sequence
1 序列对象
1.1 创建连接
import sqlalchemy
uri = "postgresql://test:123456@127.0.0.1:5432/test"
engine = sqlalchemy.create_engine(
uri, pool_size = 80, max_overflow = 20, pool_recycle = 3600
)
1.2 创建序列
from sqlalchemy import Sequence
seq = Sequence('SEQ_01')
# 创建名为SEQ_01的序列
seq.create(bind=engine)
# 删除序列
seq.drop(bind=engine)
1.3 获取现有序列
获取序列列表
from sqlalchemy import inspect
insp = inspect(engine)
# list
insp.get_sequence_names()
获取序列对象,并操作
from sqlalchemy import Sequece, MetaData
metadata = MetaData(bind=engine)
seq = Sequence('seq_name', metadata=metadata)
# 取值
seq.execute()
2. 作为主键使用
用于构建主键,在建表时同时构建,插入记录时不需要赋值。
2.1 一般形式
from sqlalchemy.ext.declarative import declarative_base, DeferredReflection
from sqlalchemy import Column, Sequence
from sqlalchemy.dialects.postgresql import Integer, VARCHAR
Base = declarative_base()class User(Base):__tablename__ = 'user'__table_args__ = ({'comment': '人员'})id= Column(Integer, Sequence('SEQ_01'), primary_key=True, comment='人员编号')name = Column(VARCHAR(50), nullable=False, comment='姓名')number= Column(VARCHAR(50), nullable=True, comment='号码')# 创建表的同时创建序列
User.__table__.create(bind = engine)
2.2 在flask中使用
class User(db.Model):__tablename__ = 'user'__table_args__ = ({'comment': '人员'})id= Column(Integer, Sequence('SEQ_01'), primary_key=True, comment='人员编号')name = Column(VARCHAR(50), nullable=False, comment='姓名')number= Column(VARCHAR(50), nullable=True, comment='号码')def __init__(self, **kwargs):super().__init__(**kwargs)
2.3 构造字符串序列
序列本身是整数型,直接通过序列构造的id只能是整数形式。有时候需要在id中包含一些信息,或者与其它表的id作区分,因而直接用序列是不行的。以下基于原始序列构建形如‘C00001’字符串型序列。
class User(db.Model):__tablename__ = 'user'__table_args__ = ({'comment': '人员'})seq = Sequence('SEQ_01', metadata=db.Model.metadata)id= Column(VARCHAR(6), seq, primary_key=True, comment='人员编号')name = Column(VARCHAR(50), nullable=False, comment='姓名')number= Column(VARCHAR(50), nullable=True, comment='号码')def __init__(self, **kwargs):super().__init__(**kwargs)if not self.id:self.id = self.next_id()def next_id(self):with db.engine.connect() as conn:nextid = conn.execute(self.seq)res = 'C' + str(nextid).zfill(5)return res
new_record = User(name = 'muscle')
db.session.add(new_record )
db.session.commit()
sqlalchemy sequence相关推荐
- sqlalchemy.exc.InternalError: (pymysql.err.InternalError) Packet sequence number wrong - got 40 expe
sqlalchemy.exc.InternalError: (pymysql.err.InternalError) Packet sequence number wrong - got 40 expe ...
- 运用SQLAlchemy
result = engine.execute(s) for row in result: Info["UserId"]=row[0] Info["UserTitle&q ...
- 【SQLAlchemy】PostgreSQL的自增长主键定义
2019独角兽企业重金招聘Python工程师标准>>> #coding=utf-8 #!/usr/bin/env pythonfrom sqlalchemy import creat ...
- 【Python】SQLAlchemy:session何时commit,何时close?
SQLAlchemy:session何时commit,何时close? 参考阅读:SQLAlchemy - 官方文档 官方文档说明了关于什么是session,以及如何创建session.如何使用ses ...
- SQLAlchemy in 查询空列表问题分析
问题场景 有model Account,SQLAlchemy 查询语句如下: query = Account.query.filter(Account.id.in_(account_ids)).ord ...
- PostgreSQL and SQLAlchemy [ubuntu]
文章目录 PostgreSQL 安装PostgreSQL 常用PostgreSQL命令 常用PostgreSQL操作 修改用户密码 添加用户并设置密码 创建数据库并指定一个拥有者 连接另一个数据库 删 ...
- SQLALchemy (ORM工具)[PostgreSQL为例]
文章目录 SQLAlchemy Basics Tutorial Install a Postgres server locally and create a database Install requ ...
- sqlalchemy 踩过的坑
记录下Sqlalchemy遇到的问题,不定时更新. 设置主键为非自增 sqlalchemy 在sql server中默认主键是自增的,如果在数据库设置的主键不是自增的,这个时候插入就会出现异常: 提示 ...
- Python3下基于bs4和sqlalchemy的爬虫实现
本文来自网易云社区 作者:王贝 小学生现在都在学python了,作为专业程序员当然不能落下了,所以,快马加鞭,周六周末在家学起了python3,python3的基本语法比较简单,相比于Java开发更加 ...
最新文章
- 确定有限状态机和非确定有限状态机详解 包含Java实现源码(Nondeterministic finite automata)
- python3 报错 ‘builtin_function_or_method‘ object has no attribute 解决方法
- 读书笔记《锋利的jQuery》
- python霍夫变换检测直线_OpenCV-Python教程(9、使用霍夫变换检测直线)
- SQL基础操作_8_基础概念
- 郑州大学软件学院 大学生创新创业选拔赛章程
- CADENCE ORCAD原理图导出FPGA UCF的方法
- php代码里加图片,php如何添加图片
- mysql 安装1364_安装完MySQL,在配置最后一步报错error Nr.1364
- 完全重构一个项目的前端代码
- Android学习笔记--菜单
- 路由器工作原理与配置
- mac 锤子android助手,苹果电脑连安卓就靠它了 锤子Smartisan点评
- 前后端交互之form表单和模板引擎
- Windows 下启动tomcat
- 五大电影三部曲的DVD
- 字体属性-参数图解-基线
- 【SQL】查询表中姓名“王”开头,并且只有二个字的数据
- 对先前的CLAY对百度知道进行的XSS漏洞的payload进行分析
- BasicRF之中断接收basicRfRxFrmDoneIsr
热门文章
- 六个unity开源项目分享
- python基础____学习笔记17 (命令行参数解析)
- 启动另外的一个应用程序的Activity(三种方式)
- “@Getter” is not applicable to field
- PCI Express解析——系列文章【5】:PCIe原理分析之——PCI Express 配置解析(BDF、BAR)、 MEM Read举例
- 牛郎织女式的爱情——双向搜索
- STM32F103ZE串口笔记
- 一个srt字幕分割工具
- 数据库查询(连接查询)
- HTML上的ul li标签消除,去掉ul li 前面的点与空白(div+css)