SQLAlchemy - 为 INSERT 返回生成的密钥?

tmn*_*tmn 1 python sqlite sqlalchemy

我在 Sqlalchemy 中处理纯文本 SQL。我宁愿不使用 ORM,除非这是唯一的方法,但是有没有一种方法可以在我执行 INSERT 时为新记录返回生成的主键值?Java 的 JDBC 实用程序可以做到这一点,如果没有办法用 SQLAlchemy 做到这一点,我会感到有点惊讶......

from sqlalchemy import create_engine, text


engine = create_engine('sqlite:///rexon_metals.db')
conn = engine.connect()

# I want this to return the generated primary key values
def insert_new_customer(customer_name, region, street_address, city, state, zip_code):
    stmt = text("INSERT INTO CUSTOMER (NAME, REGION, STREET_ADDRESS, CITY, STATE, ZIP) VALUES ("
                ":customer_name, :region, :street_address, :city, :state, :zip_code)")

    return conn.execute(stmt, customer_name=customer_name, region=region, street_address=street_address, city=city, state=state, zip_code=zip_code)
Run Code Online (Sandbox Code Playgroud)

Aka*_*wal 9

可能是因为接受答案已经一年多了,答案并没有解决问题。所以,我深入研究了sqlalchemy的文档,发现了.inserted_primary_key。它使用该命令返回单个插入行的主键的元组connection.execute()

编辑:使用.inserted_primary_key而不是.lastrowid 的另一个原因:

.lastrowid特定数据库的,它可能适用于某些数据库而不适用于其他数据库。但是.inserted_primary_key无论底层数据库如何,都将始终有效


ber*_*nie 5

您可以从以下位置获取.lastrowid

result = insert_new_customer(...)
result.lastrowid
Run Code Online (Sandbox Code Playgroud)