変数NUMBER_OF_ITERATIONSを1に設定すると、すべて正常に動作しますが、1より大きい値に変更すると問題が発生します。MySQLの奇妙な動作SELECT
まず、この場合、resの値を印刷すると、巨大な数値(18446744073709551615など)が表示されます。
第二に、最も重要な、価値のな長さは常に0であるため、この場合にはスクリプトがデータを処理することはできません...
if __name__ == '__main__':
NUMBER_OF_ITERATIONS = 2
conn = DBconnection() # return a database connection
for i in range(NUMBER_OF_ITERATIONS):
cursor = conn.cursor()
res = cursor.execute('SELECT field
FROM table
WHERE other_field = 0
LIMIT 10 LOCK IN SHARE MODE')
print '# of selected rows: ' + str(res)
values = []
for elem in cursor.fetchall():
if elem != None:
values.append(list(elem).pop())
if len(values) != 0:
# do something...
else:
print 'NO VALUES AVAILABLE'
cursor.close()
break
conn.close()
print 'DONE'
私はInnoDBストレージエンジンを使用して、同時に、この時ですスクリプトには、(LOAD DATA INFILEの構文を使用して)同じテーブルにデータをアップロードする別のスクリプトpythonがあります。
私はそれが負荷データによって引き起こされるテーブルロックに起因する可能性があると考えましたが、1から2(またはそれ以上)の反復との違いは何ですか? 1回の反復ではすべて正常に動作し、2回でも最初の反復は悪くなります。私はポイントを得ることができません。
を生成します同じテーブル(LOAD DATA INFILEの構文を使用)。 –
サブプロセスで 'LOAD DATA INFILE'を実行するコードを追加しましたが、それでもエラーを再現できませんでした。問題を示す実行可能なスクリプトを投稿できますか? – unutbu
ok、それは私が選択後にコミットするために行方不明だったようだ!しかし、数回の反復の後、私はこのエラーを受け取ります:Lock wait timeout exceeded;トランザクションを再開してみてください –