• Python 添加记录到有自增长ID的表,如何获取新产生的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 值。

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

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

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

  • 相关阅读:
    无法加载文件 因为在此系统上禁止运行脚本
    kubernetes-pod的驱逐策略
    MySQL存储引擎
    一文带你搞懂JSON和TCP/IP
    ArcGIS地图投影与坐标系转换的方法
    逆强化学习
    LeetCode337:打家劫舍III
    Gopeed够快下载器支持全平台使用
    2023年7月京东饮料行业数据分析(京东运营数据分析)
    JVM进阶(2)
  • 原文地址:https://blog.csdn.net/fangkailove/article/details/127978396