SQLAlchemy에서 생성 된 레코드의 ID를 얻으려면 어떻게해야합니까?SQLAlchemy에서 생성 된 레코드의 ID를 얻으려면
내가 뭘 :
는engine.execute("insert into users values (1,'john')")
SQLAlchemy에서 생성 된 레코드의 ID를 얻으려면 어떻게해야합니까?SQLAlchemy에서 생성 된 레코드의 ID를 얻으려면
내가 뭘 :
는engine.execute("insert into users values (1,'john')")
일반 텍스트 문을 실행하면 새 PK 값을 사용할 수 있는지 여부와 사용 방법을 나타내는 DBAPI를 사용해야합니다. SQlite와 MySQL DBAPI를 사용하면 result.lastrowid로 지정할 수 있습니다. 단지 커서의 .lastrowid 값만 제공합니다. PG, Oracle 등에서는 ".lastrowid"가 없습니다. 누군가 다른 사람이 result.fetchone()을 통해 결과를 사용할 수있는 경우 "RETURNING"을 사용할 수 있다고 말했기 때문에 (오라클과 함께 RETURNING을 사용했지만 다시 사용하지는 않았지만 RETURNING을 사용할 수없는 경우 직접 시퀀스 액세스 (pg의 NEXTVAL) 또는 "게시 후 가져 오기"작업 (PG의 CURRVAL, @@ identity 또는 scope_identity())을 사용할 수 있습니다. MSSQL).
소리가 복잡합니까? 그래서 table.insert()
을 사용하는 것이 더 낫습니다. 새로 생성 된 PK를 제공하는 SQLAlchemy의 기본 시스템은 이러한 구성을 사용하도록 설계되었습니다. 거기에있는 사람은 result.last_inserted_ids()
메서드를 사용하면 백엔드에 관계없이 모든 경우에 새로 생성 된 (경우에 따라 복합) PK를 얻을 수 있습니다. 위의 .lastrowid, 시퀀스 실행, RETURNING 등의 메소드는 모두 처리됩니다 (사용 가능한 경우 RETURNING을 사용합니다).
추가 절 있습니다 추가 할 수 있습니다 RETURNING
즉
INSERT INTO users (name, address) VALUES ('richo', 'beaconsfield') RETURNING id
당신의 삽입이 SELECT 문처럼 그런 다음 행을 검색 할 수 있습니다.
불행히도, RETURNING 문은 일부 데이터베이스 (Postgres, Oracle)에서 유일하며 특히 다른 부분에서는 생략되었습니다 (MySQL, SQLite). –
죄송합니다. SQL99에 있다고 생각했습니다. – richo
SQLAlchemy v0.6부터 대답을 업데이트하기 만하면됩니다. 'last_inserted_ids()'함수는'inserted_primary_key' 속성으로 변경됩니다. – Stiivi