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

2010-09-30 Thread bogun . dmitriy
2010/9/30 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.

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



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

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



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