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()

Reply via email to