2012-02-07 13 views
6

Tôi đang cố gắng tìm ra cách sử dụng thư viện MySQLdb bằng Python (Tôi là người mới sử dụng tốt nhất cho cả hai).Tại sao chức năng 'chèn' không thêm hàng bằng MySQLdb?

Tôi đang theo mã here, cụ thể:

cursor = conn.cursor() 
cursor.execute ("DROP TABLE IF EXISTS animal") 
cursor.execute (""" 
    CREATE TABLE animal 
    (
    name  CHAR(40), 
    category CHAR(40) 
    ) 
""") 
cursor.execute (""" 
    INSERT INTO animal (name, category) 
    VALUES 
    ('snake', 'reptile'), 
    ('frog', 'amphibian'), 
    ('tuna', 'fish'), 
    ('racoon', 'mammal') 
""") 
print "Number of rows inserted: %d" % cursor.rowcount 
cursor.close() 
conn.close() 

tôi có thể thay đổi mã này để tạo ra hoặc thả bảng, nhưng tôi không thể làm cho nó thực sự cam kết INSERT. Nó trả về giá trị row.count như mong đợi (ngay cả khi tôi thay đổi giá trị trong bảng, nó thay đổi theo thứ tôi mong đợi).

Mỗi khi tôi nhìn vào cơ sở dữ liệu bằng PHPMyAdmin, không có chèn nào được thực hiện. Làm cách nào để cam kết số INSERT vào cơ sở dữ liệu?

Trả lời

15

Bạn quên commit thay đổi dữ liệu, autocommit bị tắt theo mặc định:

cursor.close() 
    conn.commit() 
    conn.close() 

Trích dẫn Writing MySQL Scripts with Python DB-API tài liệu:

"Đối tượng kết nối cam kết() phương pháp cam kết bất kỳ thay đổi nổi bật trong giao dịch vãng lai Trong DB-API, các kết nối bắt đầu với chế độ tự động vô hiệu hóa, vì vậy bạn phải cam kết gọi() trước khi ngắt kết nối ting hoặc thay đổi có thể bị mất. "

+0

Aw man. Cảm ơn bạn. Đó là một bài học tôi sẽ không quên nữa! Tất nhiên, nó hoạt động. (Và tôi đã có tất cả các manh mối trong câu hỏi của tôi! Tiếng thở dài.) –

+2

@JayGattuso, bạn nói đúng, câu hỏi của bạn có chứa câu trả lời: "nhưng tôi không thể làm cho nó thực sự cam kết INSERT" – danihp