2009-04-01 16 views
15

Tôi có một bảng đơn giản trong mysql với các lĩnh vực sau:Làm thế nào để bạn an toàn và hiệu quả có được id hàng sau khi chèn với mysql bằng cách sử dụng MySQLdb trong python?

  • id - Tiểu học trọng điểm, int, autoincrement
  • tên - varchar (50)
  • mô tả - varchar (256)

Sử dụng MySQLdb, mô-đun python, tôi muốn chèn tên và mô tả vào bảng và lấy lại id.

Trong giả:

db = MySQLdb.connection(...) 
queryString = "INSERT into tablename (name, description) VALUES" % (a_name, a_desc);" 

db.execute(queryString); 
newID = ??? 
+0

Duplicate của [Làm thế nào để có được giá trị SẮC/AutoNumber cho hàng tôi lắp vào pymysql] (http://stackoverflow.com/questions/6802061/ how-do-i-get-the-identity-autonumber-value-for-the-row-i-insert-in-pymysql), là một cặp Q & A tốt hơn; điều này có một câu trả lời sai chấp nhận với câu trả lời đúng chỉnh sửa ở bên dưới, đó là lạ và vô ích. –

Trả lời

27

Tôi nghĩ rằng nó có thể là

newID = db.insert_id() 

Sửa bởi Poster gốc

Hóa ra, trong phiên bản của MySQLdb rằng tôi sử dụng (1.2.2) Bạn sẽ làm như sau:

conn = MySQLdb(host...) 

c = conn.cursor() 
c.execute("INSERT INTO...") 
newID = c.lastrowid 

Tôi để nguyên câu trả lời chính xác vì nó giúp tôi chỉ đúng hướng.

+0

Thực hiện việc này * trước * cam kết, nếu bạn không tự động cam kết. – kmarsh

+0

@kmarsh Tôi biết nhận xét này là siêu cũ, nhưng bạn có nhớ lý do tại sao nó phải được trước khi cam kết? –

+0

Tôi đoán vì mã được thực hiện với con trỏ và sẽ mất ngữ cảnh sau khi cam kết. Câu trả lời ngắn hơn, nó làm việc tốt hơn cho tôi theo cách đó. – kmarsh

-7

Cách dễ dàng nhất là chèn gói chèn của bạn với truy vấn chọn số vào một thủ tục được lưu trữ duy nhất và gọi mã đó trong mã của bạn. Bạn sẽ chuyển các tham số cần thiết cho thủ tục được lưu trữ và sau đó nó sẽ chọn số đếm hàng của bạn.

+1

-1 vì không sử dụng chức năng dựng sẵn của MySQL – epochwolf

+1

-1 cho tiền tố tất cả những gì có "cách dễ nhất" – Eloff

+2

-1 cho phần trên và thực tế là bạn đã bỏ lỡ thuyền. – Justin

2

Tôi không biết nếu có một API cụ thể MySQLdb cho điều này, nhưng nói chung bạn có thể lấy id chèn vào cuối bởi SELECTing LAST_INSERT_ID()

Đó là trên một cơ sở cho mỗi kết nối, vì vậy bạn không có nguy cơ chủng tộc điều kiện nếu một số khách hàng khác cũng thực hiện chèn.

0

Bạn cũng có thể làm một

conn.insert_id

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