2013-11-25 15 views
14

Tôi sử dụng một MS SQL express db. Tôi có thể kết nối và tìm nạp dữ liệu. Nhưng chèn dữ liệu không hoạt động:pyodbc chèn vào sql

cursor.execute("insert into [mydb].[dbo].[ConvertToolLog] ([Message]) values('test')") 

Tôi không nhận được lỗi nhưng không có gì được chèn vào bảng. Ngay sau khi tôi tìm nạp dữ liệu, hàng đã chèn được tìm nạp. Nhưng không có gì được cứu.

Trong MS SQL Server Management Studio, tính năng chèn sẽ hoạt động.

Trả lời

33

Bạn cần phải cam kết dữ liệu. Mỗi lệnh SQL là trong một giao dịch và giao dịch phải được cam kết để viết giao dịch cho SQL Server để nó có thể được đọc bởi các lệnh SQL khác.

Theo MS SQL Server Management Studio, mặc định là cho phép tự động cam kết có nghĩa là mỗi lệnh SQL ngay lập tức hoạt động và bạn không thể khôi phục.

Ví dụ chèn trong pyodbc Getting Started document

cursor.execute("insert into products(id, name) values ('pyodbc', 'awesome library')") 
cnxn.commit() 

hoặc tốt hơn sử dụng các thông số

cursor.execute("insert into products(id, name) values (?, ?)", 'pyodbc', 'awesome library') 
cnxn.commit() 

Khi tài liệu nói

Lưu ý các cuộc gọi đến cnxn.commit(). Bạn phải gọi cam kết hoặc thay đổi của bạn sẽ bị mất! Khi kết nối bị đóng, mọi thay đổi đang chờ xử lý sẽ được khôi phục. Điều này làm cho lỗi phục hồi rất dễ dàng, nhưng bạn phải nhớ gọi cam kết.