Hi,

The following script is then followed by its output, and finally by the 
table output.

I don't get what is going on here. Yes, I should commit the session, and 
the table is empty as expected, but why does the id keep incrementing on 
successive runs, and where is this table living, if not in the db? I'd 
expect to see the id stay at 1. Also, I'd expect to see something in 
session.dirty. Deleting the table resets the counter back to 1, so it 
looks like it is using the table in some way, but as already stated, the 
table shows as empty via a select * command.

If anyone can clarify what is going on here and satisfy my curiosity, I'd 
appreciate it. Please CC me on any reply. Thanks.

                                                           Regards, Faheem.

***************************************************************
oddity.py
***************************************************************

from sqlalchemy import *
from sqlalchemy.orm import mapper, relation, sessionmaker

def add_obj(session, obj):
     """ Check if object primary key exists in db. If so,exit, else
     add.
     """
     from sqlalchemy import and_
     from sqlalchemy.orm import object_mapper
     mapper = object_mapper(obj)
     pid = mapper.primary_key_from_instance(obj)
     criterion = and_(*(col == val for col, val in zip(mapper.primary_key, 
mapper.primary_key_from_instance(obj))))
     if session.query(obj.__class__).filter(criterion).count() > 0:
         print "%s object with id %s is already in 
db."%(type(obj).__name__, pid)
         exit
     else:
         session.add(obj)

metadata = MetaData()

mytest_table = Table(
     'mytest', metadata,
     Column('id', Integer, primary_key=True),
     )

class MyTest(object):
     def __init__(self):
         pass

mapper(MyTest, mytest_table)

dbstring = "postgres://username:pas...@localhost:5432/oddity"
db = create_engine(dbstring)
metadata.bind = db
metadata.create_all()
conn = db.connect()

Session = sessionmaker()
session = Session()
t1 = MyTest()
add_obj(session, t1)
print session.query(MyTest).count()

stmt = mytest_table.select()
for row in stmt.execute():
     print row

stmt = select([mytest_table.c.id])
print "anno statement is %s\n"%stmt
for row in stmt.execute():
     print row

print "session.dirty is %s"%session.dirty

#session.commit()
#session.flush()
#conn.close()

*************************************
script output
*************************************
$ python oddity.py
1
(1,)
anno statement is SELECT mytest.id
FROM mytest

(1,)
session.dirty is IdentitySet([])
$ python oddity.py
1
(2,)
anno statement is SELECT mytest.id
FROM mytest

(2,)
session.dirty is IdentitySet([])

************************************
table output
************************************
oddity=# select * from mytest;
  id
----
(0 rows)


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to