[sqlalchemy] looks like bug ses.query(data).update()

2010-09-30 Thread bogun . dmitriy
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()


Re: [sqlalchemy] looks like bug ses.query(data).update()

2010-09-30 Thread Michael Bayer
this is a bug , created at http://www.sqlalchemy.org/trac/ticket/1935 , and a 
patch which fixes this issue is there. will try to get this committed soon.



On Sep 30, 2010, at 9:57 AM, bogun.dmit...@gmail.com wrote:

 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.
 
 update-output.txtsa.py

-- 
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.



Re: [sqlalchemy] looks like bug ses.query(data).update()

2010-09-30 Thread bogun . dmitriy
2010/9/30 Michael Bayer mike...@zzzcomputing.com:
 this is a bug , created at http://www.sqlalchemy.org/trac/ticket/1935 , and a 
 patch which fixes this issue is there.     will try to get this committed 
 soon.

Thanks, patch fix issue.

 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.