Python/django から MySQL データベースのロックをテストしています。
私はテーブルを持っています、私はテストしています:
CREATE TABLE `test` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into test (id) values (1), (2);
commit;
私は 3 つのセッションを持っています: - 2 つの mysql コンソール - 1 つの django ビュー
コンソール 1:
mysql> begin; select t.id from test as where id = 1 t FOR UPDATE;
Query OK, 0 rows affected (0.00 sec)
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
コンソール 2:
mysql> set @@session.innodb_lock_wait_timeout = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select t.id from test as t FOR UPDATE;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> select t.id from test as t where id = 1 FOR UPDATE;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
ジャンゴ ビュー:
@db.transaction.commit_manually
def Test(request):
c = db.connection.cursor()
c.execute('set @@session.innodb_lock_wait_timeout = 1')
c.execute('select t.id from test as t FOR UPDATE')
logging.error(c.fetchall())
c.execute('select t.id from test as t where id = 1 FOR UPDATE')
logging.error(c.fetchall())
db.transaction.rollback()
return render_to_response(
'test.html',
context_instance=template.RequestContext(request, {})
)
このビューを呼び出した後、例外が発生することが予想されますが、何も起こらず、空の結果セットが返されます。
理由はありますか?
バージョン:
- パイソン: 2.7.3
- ジャンゴ: 1.4.3
- MySQL: 5.5
ありがとう、ダニエル