私たちのDjango(== 1.11.4)環境でPyMySQL(== 0.7.11)を使用しようとしました。しかし、複数のアクションが同時に実行される場合(複数の要求が同じAPI関数に送信される)、問題が発生します。PyMySQL with Django、マルチスレッドアプリケーション
私たちは、このエラーを取得する:
pymysql.err.InternalError: Packet sequence number wrong - got 6 expected 1
我々はDB(大規模な要求は、複数のユーザーから来るいくつかの時間)からレコードを削除しようとしています。
コード:
def delete(self, delete_query):
self.try_reconnect()
return self._execute_query(delete_query)
def try_reconnect(self):
if not self.is_connected:
self.connection.ping(reconnect=True)
@property
def is_connected(self)
try:
self.connection.ping(reconnect=False)
return True
execpt:
return False
def _execute_query(self, query):
with self.connection.cursor() as cursor:
cursor.execute(query)
self.connection.commit()
last_row_id = cursor.lastrowid
return last_row_id
私はデフ(自己)機能を接続で初期化 とself.connection、それらの機能がDBHandlerクラスの一部であることを指摘することは必要だと思いませんでした。
def connect(self):
self.connection = pymysql.connect(...)
このconnect関数を実行するとDjangoの起動中に、我々はグローバルインスタンスプロジェクト全体のDBHandlerの(varaible)、および複数のファイルをインポートを作成します。
私たちはを削除クエリを実行するためのゲートウェイとして機能させるためにを使用しています。
何が間違っているのですか?そしてそれをどうやって修正することができますか?
あなたは問題が何であるかは述べていません。なぜDjangoのormを使うのではなく、直接接続を使用していますか? –
私たちは既に存在するDB(私たち以外)に書いています。 問題は、アクションを並行して実行しているときに例外が発生していることです。 例外のタイプ: 1. InternalError:パケットシーケンス番号が間違っています 2. AttributeError: 'NoneType'オブジェクトに 'timeout'属性がありません。 – SpazaM