1

一部のユーザーのIDを取得するためにmysqlデータベースに接続し、それらのIDを使用して別のテーブルから別のデータセットを取得しようとしています。簡単なはずですが、mysql エラーが発生します。これが私がやろうとしていることのスニペットです。

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')

クエリの最初の部分は正常に実行されますが、2 番目の部分で再度 mysql に接続しようとすると失敗します。クエリの実行時間が長すぎることに問題があるかどうかを確認するために、100 レコードだけでテストしましたが、10 レコードでも同じです。

4

1 に答える 1

0

2 番目の部分では、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)
于 2016-05-13T03:50:38.830 に答える