2016-05-13 132 views
1

我想連接到mysql數據庫以檢索某些用戶的id並使用這些id從另一個表中檢索另一組數據。它應該很容易,但我得到的MySQL錯誤。這是我正在嘗試做的一個片段。嘗試使用Python連接到mysql時獲取2013失去的連接錯誤

import MySQLdb 
from langdetect import detect 

my_db = MySQLdb.connect(
        host="localhost", 
        port = 3306, 
        user="user", 
        passwd="password", 
        db="mydb", 
        charset = 'utf8' 
        ) 

sql1 = """SELECT id, comment FROM users WHERE usertype = 5 LIMIT 100""" 

users = [] 
db_cursor = my_db.cursor() 
db_cursor.execute(sql1) 
users = db_cursor.fetchall() 

sql2 = """SELECT first_name, last_name, email FROM user_contact WHERE id = %s""" 

user_contact =[] 
for user in users: 
    comment = user[1] 
    if detect(comment) == 'en': 
     id = user[0] 
     db_cursor = my_db.cursor() 
     db_cursor.execute(sql2, (id)) 
     temp = db_cursor.fetchall() 
     user_contact . append (temp) 

print (user_contact) 

這是我在嘗試運行此查詢時得到的錯誤消息。

_mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query') 

該查詢的第一部分通常會通過,但它通常會在第二部分嘗試再次連接到mysql時失敗。我只測試了100條記錄,只是爲了檢查查詢是否存在運行時間過長的問題,但即使有10條記錄也是如此。

+0

什麼是服務器的錯誤日誌說?您可能需要激活或增加日誌級別。 –

+0

@KlausD。我沒有錯誤日誌。我沒有數據庫的管理員權限。我只是想知道是否是第二次連接到mysql時使用相同的連接的問題。 – Cryssie

+0

然後你應該與管理員聯繫。 –

回答

0

關於你的第二部分,你可能不執行sql;)

試圖改變

for user in users: 
    comment = user[1] 
    if detect(comment) == 'en': 
     id = user[0] 
     db_cursor = my_db.cursor() 
     temp = db_cursor.fetchall() 
     user_contact . append (temp) 

for user in users: 
    comment = user[1] 
    if detect(comment) == 'en': 
     id = user[0] 
     db_cursor = my_db.cursor() 
     db_cursor.execute(sql1, (id)) 
     temp = db_cursor.fetchall() 
     user_contact . append (temp) 
+0

謝謝。其實這是我的錯字。我正在重寫問題中的代碼,並錯過了這一部分。它仍然無法與加入的執行行一起工作。 – Cryssie

+0

'user'表中有多少條記錄?你的'user_contact'表中有多少條用戶id爲''的記錄? – Blank

+0

這是一個粗略的估計,但也許是三千萬。即使將每個記錄的檢索數限制爲只有100個,相同的代碼仍然失敗,並且在使用mysqlyog查詢時只需不到1秒。 – Cryssie

相關問題