2015-11-10 15 views
5

Sử dụng Python Tôi liên tục nhận được một lỗiPython3 - 'Đã hết thời gian chờ khóa; thử khởi động lại giao dịch và quá trình chỉ trên cơ sở dữ liệu

(1205, 'Lock wait timeout exceeded; try restarting transaction') 

bất cứ khi nào tôi cố gắng để chèn vào một bảng cụ thể. Tuy nhiên, khi tôi cố gắng chèn trực tiếp từ giao diện điều khiển MySQL, nó hoạt động tốt. Nhìn vào

SHOW FULL PROCESSLIST 

trên cơ sở dữ liệu không hiển thị các truy vấn hoạt động khác. Vì đây là một cơ sở dữ liệu dev không có ứng dụng trực tiếp được đính kèm nên tôi không thể hình dung ra bất kỳ vấn đề nào. Tuy nhiên, nó đang được phục vụ trên một máy chủ lưu trữ cơ sở dữ liệu sản xuất của chúng tôi, vì vậy tôi mạnh mẽ không muốn làm resets nếu có thể. Bất kỳ lời khuyên nào về cách gỡ lỗi này?

Note Nếu tôi xem các truy vấn được chạy chống lại cơ sở dữ liệu sử dụng HIỂN THỊ ĐẦY ĐỦ processlist, mà cuối cùng không thành công với thông điệp trên, và sau đó chèn nó bằng tay từ MySQL console, nó hoạt động như mong đợi.

EDIT Dưới đây là một ví dụ về truy vấn:

INSERT INTO deals (user_ID, store_ID, storeChain_ID, title, dealSaving, 
dealDisclaimer, restriction, dealImage, dealURL, submit_ID, userProvider_ID, 
createDate, createDateTime, expirationDate, expirationDateTime, ZIP, STATE, 
city, businessType, DealType_ID, IP, rating, popular, dealSearchData, tag, 
submitName, provider_dealID) 
VALUES (NULL, 
     2651049, 
     NULL, 
     'Toronto East Community Arts Program', 
     'Three-Week Photography Workshop', 
     NULL, 
     NULL, 
     'https://a1.image.net/imgs/8423535b-bd3b-4e1e-afee-ab2869970a4c/700_q60.jpg', 
     'https://www.exmples.com/deals/1336374', 
     111, 
     1, 
     '2015-11-12', 
     '2015-11-12 10:01:58.282826', 
     '2015-11-17 09:59:59', 
     '2015-11-17 23:59:00', 
     'M4M 1K7', 
     'ON', 
     'Toronto', 
     NULL, 
     '1', 
     '127.0.0.1', 
     0, 
     144565, 
     'Three-Week Photography Workshop', 
     'Photography Class', 
     'Partner', 
     1336374) 

Sửa Một ví dụ sử dụng các gợi ý như sau:

self.DB['master']['cursor'].execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED") 
self.DB['master']['con'].commit() 
self.DB['master']['cursor'].execute(dealsquery,data) 
self.DB['master']['con'].commit() 
+0

bạn có thể hiển thị truy vấn python của mình không? – Busturdust

+0

Tôi đã thêm một truy vấn mẫu – user2694306

+0

Bạn có làm việc với nhiều luồng không? –

Trả lời

0

I Believe MySql sử dụng "lặp đọc "cô lập, mà sẽ giữ một khóa, cho các giao dịch TOÀN BỘ (aka cho đến khi cam kết, tôi tin). hãy thử sử dụng một thiết như cách ly khác nhau "Đọc cam kết"

Để thiết đọc cam kết trong python mysql là một cái gì đó giống như

cur = conn.cursor() cur.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")

chỉnh sửa: một nguồn lực giới thiệu tốt cho các mức độ cô lập http://vladmihalcea.com/a-beginners-guide-to-database-locking-and-the-lost-update-phenomena/

+0

Tôi đã thử thêm điều này trước khi câu lệnh chèn thực tế của tôi, nhưng vấn đề vẫn còn tồn tại. – user2694306

+0

bạn có cam kết thay đổi trước khi chèn không? Ngoài ra, bạn có cam kết chèn trước khi tiếp tục không? – Busturdust

+0

Yea, mỗi lần chèn được theo sau bởi một cam kết và tôi cũng cố gắng cam kết tuyên bố trước khi chèn của tôi. Tôi đã thêm một ví dụ vào câu hỏi ban đầu của tôi – user2694306

4

Nó hóa ra, một thành phần khác đã tạo kết nối và thiếu câu lệnh commit().

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