6

編集:この問題は信じられないほどです。私は今、迷惑な印刷関数をtime.sleep(0.01)に置き換えることができましたが、なぜ私は遅い実行時間の恩恵を受けるべきなのかは私を超えています。

Python3.23用のMySQL1.0.7コネクタでカーソルを反復処理する際に問題が発生しました。

print()が各反復の結果(ばかげて時間がかかる)でない限り、次のエラーが発生します。

エラーを発生させます。InterfaceError(errno = 2013)mysql.connector.errors.InterfaceError:2013:クエリ中にMySQLサーバーへの接続が失われました

何かご意見は?

これまでのところ、コードは簡単です。

self.config = {'user': user,'password': password,'host': host,'database':     
database,'raise_on_warnings': True}

self.data = []
self.clickcnx = mysql.connector.connect(**self.config)
self.clickcursor = self.clickcnx.cursor()

query = "SELECT table1, table2, table3 FROM `db`-tables;"
self.clickcursor.execute(query)
for item in self.clickcursor:
  print(item)     #this is the strange line that I need!
  self.data.append(item)
self.clickcnx.close()
4

3 に答える 3

1

1.0.7 でも同じ問題がありました。time.sleep() を追加すると修正されました。次に、1.0.10 にアップグレードし、スリープを削除しました。それもうまくいきます。

したがって、解決策は次のようになります。

pip install --upgrade mysql-connector-python

sudo を使用する必要がある場合があります。

于 2013-06-07T06:48:03.443 に答える
1

実際に結果をフェッチする部分がありません。カーソルをまたいでいるだけです。

このバージョンを試してください:

query = "SELECT table1, table2, table3 FROM `db`-tables;"
self.clickcursor.execute(query)
results = self.clickcursor.fetchall()
for item in results:
  print(item)     #this is the strange line that I need!
  self.data.append(item)
self.clickcnx.close()
于 2012-10-24T09:28:23.943 に答える
0

MySQLコネクタに問題がありました。Burhan Khalid の答えを試しましたが、うまくいきませんでした。GROUP BY ステートメントを追加することで問題を解決できました。

元のクエリ:

SELECT
    a.ID,
    a.UID,
    g.GroupId,
FROM Accounts a
    LEFT JOIN Profile p ON p.ID = a.ID
    LEFT JOIN Group g ON g.GroupId = p.GroupId
WHERE
    a.UID IS NOT NULL
    AND a.Active = 1
    AND a.Type = 1;

元の結果と同じ結果を返すクエリ:

SELECT
    a.ID,
    a.UID,
    g.GroupId,
FROM Accounts a
    LEFT JOIN Profile p ON p.ID = a.ID
    LEFT JOIN Group g ON g.GroupId = p.GroupId
WHERE
    a.UID IS NOT NULL
    AND a.Active = 1
    AND a.Type = 1
GROUP BY
    a.UID;

唯一の違いは、2 番目のクエリが InterfaceError(2013) をスローしないことです。私のクエリは約 250,000 行を返します。これらの各クエリで Explain を実行したところ、驚いたことに、2 番目のクエリは結果を一時テーブルに格納するため、最初のクエリよりも時間がかかります (期間) が、フェッチ時間は 6.00 秒から 0.50 秒になりました!

GROUP BY アグリゲータを追加して、問題が解決するかどうかを確認してください。もちろん、結果が同じであることを確認する必要があります。一意であることがわかっているテーブル値に対して GROUP BY を実行することをお勧めします。

于 2015-02-19T22:06:03.563 に答える