Уведомления

Группа в Telegram: @pythonsu

#1 Май 27, 2015 12:14:45

Mazay_Ka
Зарегистрирован: 2013-04-03
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLalchemy 'Deadlock found when trying to get lock; try restarting transaction'

Ребята уже 2 недели бьюсь с этой проблемой не знаю как решать есть у меня таблица заданная так

class table(Base):
    engine = create_engine(url)
    metadata = MetaData(bind=engine)
    __table__ =  Table('table', metadata, autoload = True)
    session = scoped_session(sessionmaker(bind=engine, autoflush=True, expire_on_commit=True, autocommit=False)) 

данные которые в нее пишу так

update_count = 0 
for item in data.items():
       update_count +=1
       param_row = tables.table.session.query(tables.table).filter(tables.table.uid == item[0]).first()
       param_row.param_1 = item[1][1]
       param_row.param_2 = item[1][0]
#         tables.table.session.query(tables.table).filter_by(uid = item[0]).with_lockmode("update").update({'param_1':item[1][1], 'param_2':item[1][0]}) # как вариант записи которым пробывал 
#         tables.table.session.query(tables.table).filter(tables.table.uid == item[0]).with_lockmode("update").update({'param_1':item[1][1], 'param_2':item[1][0]}) # как вариант записи
        if update_count > 99: 
            tables.table.commit()
            update_count = 0         
локально в mysql у меня пишется все без вопросов, причем всеми вариантам

как пишу на сервер ошибка двух типов:

выбивает в этом месте:
param_row = tables.table.session.query(tables.table).filter(tables.table.uid == item).first()

либо на закоммиченных вариантах, тоесть при самом апдейте до коммита в базу не доходит.

sqlalchemy.exc.OperationalError: (OperationalError) (1213, ‘Deadlock found when trying to get lock; try restarting transaction’)

sqlalchemy.exc.OperationalError: (OperationalError) (1205, ‘Lock wait timeout exceeded; try restarting transaction’


пробывал по разному и с помощью MySQLdb
    update_count = 0 
    for item in data.items():
            update_count += 1
            cur.execute("""
            INSERT INTO table
                (uid, params_1, _params_2)
            VALUES 
                (%s, %s, %s) 
            ON DUPLICATE KEY UPDATE 
               params_1  = VALUES(params_1), 
               params_2   = VALUES(params_2) ;
                       """, (item[0], item[1][0], item[1][1]))
            if update_count > 99:
                con.commit()
                update_count = 0    
тут таже ошибка.
Пробывал коммитить чаще не могу понять в чем проблема.

Отредактировано Mazay_Ka (Май 27, 2015 12:16:59)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version