DAL без web2py - PullRequest
       31

DAL без web2py

6 голосов
/ 25 января 2010

Я использую web2py для питания своего веб-сайта. Я решил использовать web2py DAL для долго работающей программы, которая работает за сайтом. Эта программа не обновляет свои данные или базу данных (иногда).

from gluon.sql import *
from gluon.sql import SQLDB

from locdb import * 
# contains
# db = SQLDB("mysql://user/pw@localhost/mydb", pool_size=10)
# db.define_table('orders', Field('status', 'integer'), Field('item', 'string'),
#    migrate='orders.table')
orderid = 20 # there is row with id == 20 in table orders
#when I do 
db(db.orders.id==orderid).update(status=6703)
db.commit()

Он не обновляет базу данных, и выбор заказов с этим идентификатором показывает правильные данные. В некоторых случаях «db.rollback ()» после фиксации, кажется, помогает.

Очень странно, если не сказать больше. Вы видели это? Что важнее, вы знаете решение?


UPDATE:
Исправление: Рассматриваемый выбор выполняется внутри программы, а не за ее пределами.

Иногда при выполнении серии обновлений некоторые из них работают и будут доступны снаружи, а некоторые не будут доступны. Кроме того, некоторые запросы будут возвращать данные, которые были возвращены первоначально, даже если в базе данных произошли изменения с момента первоначального запроса th4.

Я испытываю желание отказаться от этого подхода и перейти к другому методу, какие-либо предложения?

1 Ответ

3 голосов
/ 26 января 2010

Эта проблема была решена: mysql работает на уровне изоляции REPEATABLE READ (то есть, как только транзакция начинается, данные, отраженные в выводе select, не изменятся, пока транзакция не завершится). Необходимо было изменить уровень изоляции на READ COMMITED, и это решило проблему. Кстати, READ COMMITED - это уровень изоляции, на котором Oracle и mssql работают по умолчанию. Это можно установить в my.cnf . Подробности в ссылке ниже:

http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html

...