【问题标题】:Get/use autoincremented Primary Key of a new record as a Foreign Key for a record in another table [duplicate]获取/使用新记录的自动增量主键作为另一个表中记录的外键[重复]
【发布时间】:2020-06-09 09:23:31
【问题描述】:

我的问题是针对 SQLAlchemy 的,但是知道如何在任何 sql 语言中做到这一点也很棒。

我正在尝试同时向 2 个不同的表创建/添加 2 条记录:

第一个(父)记录将有一个生成的(自动增量=True)主键,我希望第二个(子)记录有一个列,它是第一个记录主键的外键。我的问题是,当第一条记录添加到其表中时,我不知道如何获取生成的主键,以便我可以将该值用作我的第二条记录(在另一个表中)中的外键。

Ex: 

parent table:
[pk_id, name, date]
[55, "value", "value"]

child table:
[id, fk_id, color, quantity]
[300, 55, "value", "value"]

我需要从父表中获取生成的 55,并在创建子记录时将其用作 fk_id。

我该如何做到这一点?

【问题讨论】:

    标签: sql sqlalchemy flask-sqlalchemy


    【解决方案1】:

    您可以使用inserted_primary_key 查找最近插入的记录的主键。

    https://kite.com/python/docs/sqlalchemy.engine.ResultProxy.inserted_primary_key

    根据文档,它会根据您的数据库后端自动填充,这是来自 https://overiq.com/sqlalchemy-101/crud-using-sqlalchemy-core/ 的示例

    ins = insert(customers)
    
    r = conn.execute(ins, 
        first_name = "Tim", 
        last_name = "Snyder", 
        username = "timsnyder", 
        email = "timsnyder@mail.com",
        address = '1611 Sundown Lane',
        town = 'Langdale'
    )
    r.inserted_primary_key
    

    【讨论】:

    • 这是否需要返回客户端,然后进行后续查询,或者我可以在 db 上执行一个指令集吗?
    猜你喜欢
    • 2014-03-23
    • 2020-07-10
    • 1970-01-01
    • 2013-01-10
    • 2018-05-24
    • 2013-05-11
    • 2014-04-21
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多