Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python SQLAlchemy get returning ID after inserting

I want to get the ID of the last inserted record after inserting in postgresql using SQLAlchemy. Here is code,

insert_record = {list of data}
result = connection.execute(tbl_example.insert().returning(tbl_example.c.id), insert_record)
print result.id

The inserting does fine but I can't seem to get the ID of the last inserted, I get the following error,

AttributeError: 'ResultProxy' object has no attribute 'id'

Where is the return ID located in the returning object?

like image 704
rksh Avatar asked Mar 15 '26 16:03

rksh


1 Answers

It's located directly in returning object. There is example from documentation:

stmt = table.update().\
          where(table.c.data == 'value').\
          values(status='X').\
          returning(table.c.server_flag,
                    table.c.updated_timestamp)

for server_flag, updated_timestamp in connection.execute(stmt):
    print(server_flag, updated_timestamp)

Also, ResultProxy supports accessing via position (as in example) and via name. So, you can use something like row_id = row['id'] where:

for row in connection.execute(stmt):
    row_id = row['id']
    row_id = row.id
    row_id = row[0]
    print(row_id)

Note that not all database backends support this feature. From the documentation:

Note that not all databases/DBAPIs support RETURNING. For those backends with no support, an exception is raised upon compilation and/or execution.

like image 85
ShabashP Avatar answered Mar 17 '26 04:03

ShabashP



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!