I try to update counter for omr object ang got following: Traceback (most recent call last): File "/home/vugluskr/tmp/z/sa.py", line 56, in <module> main() File "/home/vugluskr/tmp/z/sa.py", line 52, in main q2.update({data.cnt: data.cnt + 1}) File "/usr/lib/python2.6/site-packages/sqlalchemy/orm/query.py", line 2184, in update difference(to_evaluate)) File "/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.py", line 257, in expire_attributes impl = self.manager[key].impl KeyError: 'counter'
Tests script and full output in attaches. Maybe I going wrong way and SA have more simpler way awailable to make query like: update tbl set counter = counter + 1 where ... -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
INFO:sqlalchemy.engine.base.Engine.0x...9b4c:PRAGMA table_info("data") INFO:sqlalchemy.engine.base.Engine.0x...9b4c:() INFO:sqlalchemy.engine.base.Engine.0x...9b4c: CREATE TABLE data ( idnr INTEGER NOT NULL, counter INTEGER NOT NULL, PRIMARY KEY (idnr) ) INFO:sqlalchemy.engine.base.Engine.0x...9b4c:() INFO:sqlalchemy.engine.base.Engine.0x...9b4c:COMMIT INFO:sqlalchemy.engine.base.Engine.0x...9b4c:BEGIN INFO:sqlalchemy.engine.base.Engine.0x...9b4c:INSERT INTO data (counter) VALUES (?) INFO:sqlalchemy.engine.base.Engine.0x...9b4c:(0,) INFO:sqlalchemy.engine.base.Engine.0x...9b4c:COMMIT INFO:sqlalchemy.engine.base.Engine.0x...9b4c:BEGIN INFO:sqlalchemy.engine.base.Engine.0x...9b4c:SELECT data.counter AS data_counter, data.idnr AS data_idnr FROM data INFO:sqlalchemy.engine.base.Engine.0x...9b4c:() DEBUG:sqlalchemy.engine.base.Engine.0x...9b4c:Col ('data_counter', 'data_idnr') DEBUG:sqlalchemy.engine.base.Engine.0x...9b4c:Row (0, 1) INFO:sqlalchemy.engine.base.Engine.0x...9b4c:UPDATE data SET counter=(data.counter + ?) WHERE data.idnr = ? INFO:sqlalchemy.engine.base.Engine.0x...9b4c:(1, 1) Traceback (most recent call last): File "/home/vugluskr/tmp/z/sa.py", line 56, in <module> main() File "/home/vugluskr/tmp/z/sa.py", line 52, in main q2.update({data.cnt: data.cnt + 1}) File "/usr/lib/python2.6/site-packages/sqlalchemy/orm/query.py", line 2184, in update difference(to_evaluate)) File "/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.py", line 257, in expire_attributes impl = self.manager[key].impl KeyError: 'counter'
#!/usr/bin/env python #-*- coding:utf-8 -*- #import pdb import os, sys import time import logging #import re #import errno #import locale #import pprint # mutable inputs from sqlalchemy import * from sqlalchemy import orm from sqlalchemy.ext.declarative import declarative_base decl = declarative_base() class data(decl): __tablename__ = 'data' idnr = Column(Integer, primary_key=True) cnt = Column('counter', Integer, nullable=False, default=0) def __repr__(self): return '<tbl.%s(idnr=%s, cnt="%s")>' % ( self.__class__.__name__, self.idnr, self.cnt) def main(): logging.basicConfig() logging.getLogger().setLevel(logging.DEBUG) log = logging.getLogger('sqlalchemy.engine') log.setLevel(logging.DEBUG) eng = create_engine('sqlite://') sm = orm.sessionmaker(bind=eng, autoflush=False, autocommit=False) decl.metadata.create_all(eng) ses = sm() e = data() ses.add(e) ses.commit() ses.close() ses = sm() q = ses.query(data) for e in q: q2 = ses.query(data).filter(data.idnr==e.idnr) q2.update({data.cnt: data.cnt + 1}) ses.commit() if __name__ == '__main__': main()