代码之家  ›  专栏  ›  技术社区  ›  khelll

在SQLAlchemy中获取已创建记录的id

  •  4
  • khelll  · 技术社区  · 16 年前

    如何获取SQLAlchemy中创建的记录的id?

    我正在做:

    engine.execute("insert into users values  (1,'john')")
    
    2 回复  |  直到 16 年前
        1
  •  14
  •   zzzeek    16 年前

    当您执行纯文本语句时,新的PK值是否可用以及通过何种方式,取决于您使用的DBAPI。使用SQlite和MySQL DBAPIs,您将得到result.lastrowid,它只为光标提供.lastrowid的值。对于PG、Oracle等,没有“.lastrowid”-正如其他人所说,对于那些通过result.fetchone()可以获得结果的情况,可以使用“RETURNING”(尽管使用Oracle返回,同样没有利用SQLAlchemy表达式构造,需要几个笨拙的步骤),或者,如果返回不可用,您可以使用直接序列访问(pg中的NEXTVAL)或“后期提取”操作(pg中的CURRVAL、@@identity或MSSQL中的scope_identity())。

    听起来很复杂,对吧?这就是为什么你最好使用 table.insert() result.last_inserted_ids() 方法在所有情况下都为您提供新生成的(可能是复合的)PK,而不考虑后端。上面的.lastrowid、序列执行、返回等方法都是为您处理的(0.6在可用时使用返回)。

        2
  •  3
  •   richo    16 年前

    RETURNING

    INSERT INTO users (name, address) VALUES ('richo', 'beaconsfield') RETURNING id
    

    然后检索一行,就像insert是SELECT语句一样。

    推荐文章