首页 > 编程语言 >Python 添加记录到有自增长ID的表,如何获取新产生的ID

Python 添加记录到有自增长ID的表,如何获取新产生的ID

时间:2022-11-23 22:35:24浏览次数:39  
标签:insert Python self label cursor 添加 lastrowid ID


  关系型数据库设计时,将ID列设为自动增长列是很普遍的方式,那么在python用 insert 插入数据后如何获取由数据库产生的ID,从而获取新加的记录呢?

一般的方法是在表里加一个guid列,这列的值在前台就产生,前台 insert 插入后,可以按这个guid重新select到记录。

  python 里对 oracle 和 sqlite 的操作可以内置了类似的方法,可以直接取到ID. 

sqlite 是pythin内建支持的数据库,oralce 需要用 cx_oralce 模块。两者取ID的方式稍有不同,但逻辑一致。

下面是两段同功能代码,分别是对 sqlite 和 oracle 操作。

这是sqllite取ID方式,执行完insert 后,cursor 直接就能通过lastrowid取得 ID 值。

def AddFangan(self, label):
c = self.conn.cursor()
c2 = c.execute("insert into JYFA (fieldlabel,FIELDTYPE,pid) values(?,?,?)", (label, 0, 0))
dataid = c2.lastrowid
self.conn.commit()
return dataid

这是cx_oracle 取ID方式,insert 执行后,cursor取回的lastrowid不是 ID列的值,而是oracle内置的 rowid 的值,然后通过rowid 再 select 取回ID列值。

def AddFangan(self, label):
c = self.conn.cursor()
c.execute("insert into %s (fieldlabel,FIELDTYPE,pid,dsporder) values(:1,:2,:3,:4)" % self.tb1name,
(label, 0, 0, 0))
lastrowid = c.lastrowid
cursor = c.execute("select id from %s where rowid=:1 " % self.tb1name, (lastrowid,))
row = cursor.fetchone()
dataid = row[0]
self.conn.commit()
return dataid

标签:insert,Python,self,label,cursor,添加,lastrowid,ID
From: https://blog.51cto.com/fangkailove/5881781

相关文章

  • python 操作Oracle 自关联表进行树结构复制算法
     最近一个项目中,用关系型表来存储树型结构,其中有一段树节点复制的算法,典型的递归运用,可作为递归算法参考练习。defCheckItem_GET_ById(self,dataid):"""......
  • python中的列表和元组
    #1.列表的格式#[数据1,数据2,数据3,···]#列表可变数据类型#列表可以存储多个数据,数据之间的逗号以英文逗号分隔#列表可以存储不同类型数据,但一般存储同一数......
  • python 读写西门子PLC例子
    client.py 存取 西门子PLC数据的客户端例子 #!/usr/bin/envpython#-*-coding:utf-8-*-#Project:pi4b_aliyuniot#File:snap_client.py#Author:Long.Xu<fa......
  • python subprocess.cal调用wkhtmltohtml中遇到的问题
    最近项目中使用了wkhtmltohtml 工具,这个工具转换pdf功能非常方便。但是在python作为命令来调用时有些要注意的地方,另外还有一些和字体相关的问题要注意。一.字体问题......
  • python requests 上传文件
    起因为了测试企业微信上传临时素材接口,我写了一段python脚本,使用的是requests 库,按照官方接口说明: 要构造相应表单的栏位,才能指定上传后文件的显示名称,于是我测试脚本如下......
  • python http.server 的测试和常见问题解决方法
    一.测试准备先分别写一个简单httpserver 和一个html文件。html文件只是引入了jquery, 后面测试用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • python 编程技巧
     元组命名如何为元组中的每个元素命名,提高程序可读性案例:学生信息系统中数据为固定格式:(名字,年龄,性别,邮箱地址,......)学生数量很大为了减小存储开销,对每个学生信息用元......
  • Android网络请求(终) 网络请求框架Retrofit
    Android网络请求(终)网络请求框架RetrofitRetrofit底层是由OkHttp封装的,Retrofit对于注解的使用十分频繁,所以不了解注解的同学们可以去查查资料什么的。这里有一个小细......
  • Android Studio 连接 MySQL数据库
    1、下载MySQL-connector-jave.jar包地址如下:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46 2、将jar包移到如图所示的位置,然后右键addasl......
  • python初体验
    第一句代码print("helloworld")快速切换项目栏alt+1快速运行当前文件shift+ctrl+F10关闭控制台shift+ctrl+F4 注释:单行注释:#(快捷键ctrl+/)多行注释:""......