I ran into the following situation when using SQLAlchemy, and let me 
explain using an example. Assume there is a table "Department", with three 
columns: ID, name and charter, where ID is auto-generated by DB.

class Department(class_Base):
>     __tablename__ = "department"
>     id = Column(Integer, Sequence('department_id_seq'), primary_key=True)
>     name = Column(String(250), nullable=False, unique=True)
>     charter = Column(String(250), nullable=True)
>     def __repr__(self):
>         return "%s: id: [%d], name: [%s], charter: [%s]" % 
> (self.__class__, self.id, self.name, self.charter)



Below is the skeleton of code:

> # step 1: grab a Department object using ORM
>
> # department name is unique
> l_department = g_session.query(Department).filter(Department.name == 
> in_department_name).one()
>     
> # step 2: modify its charter using SQLExpression
> l_update_department = update(Department).where(Department.name == 
> in_department_name).values(charter=bindparam('charter'))
> l_update_department.execute({'charter': in_department_charter})
>     
> # step 3: grab it again using ORM
> l_department = g_session.query(Department).filter(Department.name == 
> in_department_name).one()

    
What is unexpected is, the field "charter" is the same in step 1 and step 
3, even though it is modified in step 2. The SQL statements in all three 
steps are good, and the column "charter" indeed got updated per what I 
checked from the database.

Question:
1. Is it something I should not do (mixing SQL expression and ORM)? 
However, I did see it works in some cases.
2. Is it related to the database transactional capability? I am simply 
testing against SQLite

Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to