2010-01-26 47 views
9

Lý tưởng nhất là tôi muốn để có thể làm điều gì đó như:Trả về một giá trị với psycopg2

id_of_new_row = cursor.lastrowid() 

trong đó tôi nhận được id của hàng mới được tạo ra hoặc sửa đổi. Nhưng điều này không có sẵn thông qua psycopg2. Ngoài ra, tôi đã cố gắng này:

id_of_new_row = cursor.execute('INSERT INTO this_table (value1, value2, value3) VALUES (%s, %s, %s) RETURNING id', (some_value1, some_value2, some_value3)) 

mà không làm việc, có lẽ bởi vì nó sẽ không biết id cho đến sau khi cam kết được thực hiện ...

Help!

+0

Loại ID bạn đang cố gắng nhận - OID hoặc giá trị của trường được khai báo SERIAL? –

+0

Tôi không biết. Tôi là người mới đến. Đây là một dự án django, và django thiết lập cơ sở dữ liệu postgres với syncdb dựa trên các mô hình của tôi. Tôi không chắc chắn nếu django tuyên bố OID trong quá trình tạo bảng tự động. Tôi cần khóa chính của mỗi hàng, được tạo tự động dưới dạng "id" bởi django, trừ khi được chỉ định khác. Tôi sẽ đọc một số. –

Trả lời

19

Chắc chắn nó sẽ, nó sẽ biết ID ngay sau khi lệnh kết thúc, đó là cách thực hiện RETURNING. Bạn cần phải thực sự tìm nạp nó, vì vậy, chẳng hạn như:

cursor.execute("INSERT INTO .... RETURNING id") 
id_of_new_row = cursor.fetchone()[0] 

sẽ hoạt động trong trường hợp của bạn.

+0

Tuyệt vời. Cảm ơn! –

+0

là chỉ mục cách duy nhất để tìm nạp các giá trị từ kết quả truy vấn thực hiện. Có ba cách nào để có được giá trị không? như row.id? –

3

RETURNING hoạt động trên Postgresql> = 8.2

Các vấn đề liên quan