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