sqlalchemy在现有数据库基础上使用,获取最新插入数据的ID

一般在ORM中都是每个数据库表都会提前创建对应的class,进行数据库和对象的关联,方便操作,但是有时候会用到去操作现有数据库的案例,这样就有需求了,在现有数据库的基础上使用sqlalchemy操作数据库


"""sqlalchemy 操作oracle数据库示例"""
 
from sqlalchemy import create_engine, Table, MetaData
from sqlalchemy.orm import Session
 
metadata = MetaData()
# echo 参数用于标记是否输出日志信息
engine = create_engine( 'oracle+cx_oracle://user:password@addr/sid', echo = True)
session = Session(engine)
 
# 获取指定数据库表对象
ex_table = Table('数据库中表名', metadata, autoload=True, autoload_with=engine)
 
# 插入数据
ret = session.execute(ex_table.insert(), {"字段名": "值","":""...})
session.commit()
 
# 查询数据返回第一条
res = session.query(ex_table).first()

数据插入后可能会经常需要用到返回当前插入数据的ID,这个问题恶心了我很久,网上怎么说的都有,都是复制粘贴,而且他们的方法也不适用于上述没有class模型的案例【只是不适用于我上面的方式】

1,在数据库中插入的时候就返回ID

2,在sqlalchemy中有class数据表模型的方法

3,提取lastrowid 但是我这边是直接报错

最后在Stack Overflow上面看到了大神们的解答,该方案对我来说有用:

 

源代码如下:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值