]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Lots of fixes to the code examples to specify imports explicitly.
authorMichael Trier <mtrier@gmail.com>
Tue, 31 Mar 2009 22:31:08 +0000 (22:31 +0000)
committerMichael Trier <mtrier@gmail.com>
Tue, 31 Mar 2009 22:31:08 +0000 (22:31 +0000)
Explicit imports make it easier for users to understand the examples.
Additionally a lot of the examples were fixed to work with the changes in the
0.5.x code base. One small correction to the Case expression.  Thanks a bunch
to Adam Lowry! Fixes #717.

25 files changed:
examples/association/basic_association.py
examples/association/proxied_association.py
examples/collections/large_collection.py
examples/custom_attributes/custom_management.py
examples/custom_attributes/listen_for_events.py
examples/derived_attributes/attributes.py
examples/dynamic_dict/dynamic_dict.py
examples/elementtree/adjacency_list.py
examples/elementtree/optimized_al.py
examples/elementtree/pickle.py
examples/graphs/graph1.py
examples/nested_sets/nested_sets.py
examples/pickle/custom_pickler.py
examples/poly_assoc/poly_assoc.py
examples/poly_assoc/poly_assoc_fk.py
examples/poly_assoc/poly_assoc_generic.py
examples/polymorph/concrete.py
examples/polymorph/polymorph.py
examples/polymorph/single.py
examples/postgis/postgis.py
examples/sharding/attribute_shard.py
examples/vertical/dictlike-polymorphic.py
examples/vertical/dictlike.py
examples/vertical/vertical.py
lib/sqlalchemy/sql/expression.py

index 8078a2bb9c80a7291f68928c32d6e25d43026056..a56d2383e6898bf82fbeabd724aa864e3d0b3a70 100644 (file)
@@ -10,13 +10,14 @@ the price paid by the user for that particular order, which is independent
 of the price on each Item (since those can change).
 """
 
-import logging
 from datetime import datetime
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import (create_engine, MetaData, Table, Column, Integer,
+    String, DateTime, Numeric, ForeignKey, and_)
+from sqlalchemy.orm import mapper, relation, create_session
 
 # Uncomment these to watch database activity.
+#import logging
 #logging.basicConfig(format='%(message)s')
 #logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
 
@@ -72,10 +73,10 @@ mapper(OrderItem, orderitems, properties={
 session = create_session()
 
 # create our catalog
-session.save(Item('SA T-Shirt', 10.99))
-session.save(Item('SA Mug', 6.50))
-session.save(Item('SA Hat', 8.99))
-session.save(Item('MySQL Crowbar', 16.99))
+session.add(Item('SA T-Shirt', 10.99))
+session.add(Item('SA Mug', 6.50))
+session.add(Item('SA Hat', 8.99))
+session.add(Item('MySQL Crowbar', 16.99))
 session.flush()
 
 # function to return items from the DB
@@ -89,10 +90,10 @@ order = Order('john smith')
 order.order_items.append(OrderItem(item('SA Mug')))
 order.order_items.append(OrderItem(item('MySQL Crowbar'), 10.99))
 order.order_items.append(OrderItem(item('SA Hat')))
-session.save(order)
+session.add(order)
 session.flush()
 
-session.clear()
+session.expunge_all()
 
 # query the order, print items
 order = session.query(Order).filter_by(customer_name='john smith').one()
index ed3afd597c750ebbd65048faf1ce6b74c3e246e8..3a78e3adfbcfc6a9b6ddc038b521426209dfbd83 100644 (file)
@@ -2,8 +2,9 @@
 the usage of the associationproxy extension."""
 
 from datetime import datetime
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import (create_engine, MetaData, Table, Column, Integer,
+    String, DateTime, Float, ForeignKey, and_)
+from sqlalchemy.orm import mapper, relation, create_session
 from sqlalchemy.ext.associationproxy import AssociationProxy
 
 engine = create_engine('sqlite://')
@@ -82,7 +83,7 @@ order.items.append(item('SA Hat'))
 session.add(order)
 session.flush()
 
-session.clear()
+session.expunge_all()
 
 # query the order, print items
 order = session.query(Order).filter_by(customer_name='john smith').one()
index 203aa6d230a1f0c9c0647447d902db75bdbc3ffb..2451ea5826bcbb9222ef158bd2fa80125b86e622 100644 (file)
@@ -4,8 +4,10 @@ Also see the docs regarding the new "dynamic" relation option, which
 presents a more refined version of some of these patterns.
 """
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
+from sqlalchemy.orm import (mapper, relation, create_session, MapperExtension,
+    object_session)
+
 meta = MetaData('sqlite://')
 meta.bind.echo = True
 
@@ -56,11 +58,11 @@ org.members.append(Member('member one'))
 org.members.append(Member('member two'))
 org.members.append(Member('member three'))
 
-sess.save(org)
+sess.add(org)
 
 print "-------------------------\nflush one - save org + 3 members"
 sess.flush()
-sess.clear()
+sess.expunge_all()
 
 # reload. load the org and some child members
 print "-------------------------\nload subset of members"
@@ -68,7 +70,7 @@ org = sess.query(Organization).get(org.org_id)
 members = org.member_query.filter(member_table.c.name.like('%member t%')).all()
 print members
 
-sess.clear()
+sess.expunge_all()
 
 
 # reload.  create some more members and flush, without loading any of the original members
@@ -80,7 +82,7 @@ org.members.append(Member('member six'))
 print "-------------------------\nflush two - save 3 more members"
 sess.flush()
 
-sess.clear()
+sess.expunge_all()
 org = sess.query(Organization).get(org.org_id)
 
 # now delete.  note that this will explictily delete members four, five and six because they are in the session,
index 707e182ba0fd9944bb1128a37053f2a709e84958..b8ea70dfd57a88999677646efe2aa005570a3cb1 100644 (file)
@@ -9,8 +9,10 @@ of "instance.__dict__".  Note that the default collection implementations can be
 with a custom attribute system as well.
 
 """
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import (create_engine, MetaData, Table, Column, Integer, Text,
+    ForeignKey)
+from sqlalchemy.orm import (mapper, relation, create_session,
+    InstrumentationManager)
 
 from sqlalchemy.orm.attributes import set_attribute, get_attribute, del_attribute, is_instrumented
 from sqlalchemy.orm.collections import collection_adapter
@@ -170,10 +172,10 @@ if __name__ == '__main__':
     assert isinstance(a1.bs, MyCollection)
 
     sess = create_session()
-    sess.save(a1)
+    sess.add(a1)
 
     sess.flush()
-    sess.clear()
+    sess.expunge_all()
 
     a1 = sess.query(A).get(a1.id)
 
@@ -184,7 +186,7 @@ if __name__ == '__main__':
     a1.bs.remove(a1.bs[0])
 
     sess.flush()
-    sess.clear()
+    sess.expunge_all()
 
     a1 = sess.query(A).get(a1.id)
     assert len(a1.bs) == 1
index de28df5b3a01e76244d45465c5cd83402c4a9893..3264b02462d8d598222fac2b0ad6ad9bbfcc63ed 100644 (file)
@@ -39,8 +39,8 @@ class AttributeListener(AttributeExtension):
 
 if __name__ == '__main__':
 
-    from sqlalchemy import *
-    from sqlalchemy.orm import *
+    from sqlalchemy import Column, Integer, String, ForeignKey
+    from sqlalchemy.orm import relation
     from sqlalchemy.ext.declarative import declarative_base
 
     class Base(object):
@@ -82,4 +82,4 @@ if __name__ == '__main__':
     m1.related.mapped.append(MyMappedClass(data='m2'))
     del m1.data
     
-    
\ No newline at end of file
+    
index f53badc74574db59776979e3f137efcb9cacd0d9..4a1618985402c617162d821cb74febbd0eafdb66 100644 (file)
@@ -36,8 +36,8 @@ def hybrid_property(fget, fset=None, fdel=None):
 
 ### Example code
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer
+from sqlalchemy.orm import mapper, create_session
 
 metadata = MetaData('sqlite://')
 metadata.bind.echo = True
@@ -99,14 +99,14 @@ session = create_session()
 intervals = [Interval1(1,4), Interval1(3,15), Interval1(11,16)]
 
 for interval in intervals:
-    session.save(interval)
-    session.save(Interval2(interval.start, interval.length))
+    session.add(interval)
+    session.add(Interval2(interval.start, interval.length))
 
 session.flush()
 
 print "Clear the cache and do some queries"
 
-session.clear()
+session.expunge_all()
 
 for Interval in (Interval1, Interval2):
     print "Querying using interval class %s" % Interval.__name__
index b47a6d68f6313333b600820eee45f5899c5ba3de..3846c29944e5bd3e4f88bc6e98e21e898eed661f 100644 (file)
@@ -40,8 +40,8 @@ class MyProxyDict(object):
         self.collection.append(value)\r
 \r
 from sqlalchemy.ext.declarative import declarative_base\r
-from sqlalchemy import *\r
-from sqlalchemy.orm import *\r
+from sqlalchemy import create_engine, Column, Integer, String, ForeignKey\r
+from sqlalchemy.orm import sessionmaker, dynamic_loader\r
 \r
 Base = declarative_base(engine=create_engine('sqlite://'))\r
 \r
index 706cc88a07e6dab9a914c3ff28719bf415108334..9efacad872a0baef4cb472727cc17099030ec4be 100644 (file)
@@ -7,8 +7,9 @@ styles of persistence are identical, as is the structure of the main Document cl
 """
 
 ################################# PART I - Imports/Coniguration ###########################################
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import (MetaData, Table, Column, Integer, String, ForeignKey,
+    Unicode, and_)
+from sqlalchemy.orm import mapper, relation, create_session, lazyload
 
 import sys, os, StringIO, re
 
@@ -22,8 +23,7 @@ logging.basicConfig()
 #logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG)
 
 
-from elementtree import ElementTree
-from elementtree.ElementTree import Element, SubElement
+from xml.etree import ElementTree
 
 meta = MetaData()
 meta.bind = 'sqlite://'
@@ -157,14 +157,14 @@ session = create_session()
 for file in ('test.xml', 'test2.xml', 'test3.xml'):
     filename = os.path.join(os.path.dirname(sys.argv[0]), file)
     doc = ElementTree.parse(filename)
-    session.save(Document(file, doc))
+    session.add(Document(file, doc))
 
 print "\nSaving three documents...", line
 session.flush()
 print "Done."
 
 # clear session (to illustrate a full load), restore
-session.clear()
+session.expunge_all()
 
 print "\nFull text of document 'text.xml':", line
 document = session.query(Document).filter_by(filename="test.xml").first()
index 8b50f6805d0a41ecabf4d2f6fed4c1ebcbdd4ffb..39d35921a7e004ac9fac088b1e73008104a21d7b 100644 (file)
@@ -6,8 +6,9 @@ which joins on only three tables.
 """
 
 ################################# PART I - Imports/Configuration ###########################################
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import (MetaData, Table, Column, Integer, String, ForeignKey,
+    Unicode, and_)
+from sqlalchemy.orm import mapper, relation, create_session, lazyload
 
 import sys, os, StringIO, re
 
@@ -21,8 +22,7 @@ logging.basicConfig()
 #logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG)
 
 
-from elementtree import ElementTree
-from elementtree.ElementTree import Element, SubElement
+from xml.etree import ElementTree
 
 meta = MetaData()
 meta.bind = 'sqlite://'
@@ -166,14 +166,14 @@ session = create_session()
 for file in ('test.xml', 'test2.xml', 'test3.xml'):
     filename = os.path.join(os.path.dirname(sys.argv[0]), file)
     doc = ElementTree.parse(filename)
-    session.save(Document(file, doc))
+    session.add(Document(file, doc))
 
 print "\nSaving three documents...", line
 session.flush()
 print "Done."
 
 # clear session (to illustrate a full load), restore
-session.clear()
+session.expunge_all()
 
 print "\nFull text of document 'text.xml':", line
 document = session.query(Document).filter_by(filename="test.xml").first()
index e7cd86984e2123c8d5f8404321fa8dc8edf4b0f1..53d2ee2b6c0c16910fe491a8c6423135f1146cda 100644 (file)
@@ -6,8 +6,9 @@ structure in distinct rows using two additional mapped entities.  Note that the
 styles of persistence are identical, as is the structure of the main Document class.
 """
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import (create_engine, MetaData, Table, Column, Integer, String,
+    PickleType)
+from sqlalchemy.orm import mapper, create_session
 
 import sys, os
 
@@ -20,7 +21,7 @@ logging.basicConfig()
 # uncomment to show SQL statements and result sets
 #logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG)
 
-from elementtree import ElementTree
+from xml.etree import ElementTree
 
 engine = create_engine('sqlite://')
 meta = MetaData(engine)
@@ -53,11 +54,11 @@ doc = ElementTree.parse(filename)
     
 # save to DB
 session = create_session()
-session.save(Document("test.xml", doc))
+session.add(Document("test.xml", doc))
 session.flush()
 
 # clear session (to illustrate a full load), restore
-session.clear()
+session.expunge_all()
 document = session.query(Document).filter_by(filename="test.xml").first()
 
 # print
index 8188d7c8707541416303094f1f098cea1c367ffb..6122e65f1f3fa86882d2f753353e912798979c1c 100644 (file)
@@ -1,7 +1,7 @@
 """a directed graph example."""
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer, ForeignKey
+from sqlalchemy.orm import mapper, relation, create_session
 
 import logging
 logging.basicConfig()
@@ -70,10 +70,10 @@ n7.add_neighbor(n2)
 n1.add_neighbor(n3)
 n2.add_neighbor(n1)
 
-[session.save(x) for x in [n1, n2, n3, n4, n5, n6, n7]]
+[session.add(x) for x in [n1, n2, n3, n4, n5, n6, n7]]
 session.flush()
 
-session.clear()
+session.expunge_all()
 
 n2 = session.query(Node).get(2)
 n3 = session.query(Node).get(3)
index e83a263e93f3e70f339c1d87ae6403e8a9344463..fbb481759021affa738ed4641e812667c905a1bd 100644 (file)
@@ -4,9 +4,9 @@ http://www.intelligententerprise.com/001020/celko.jhtml
 
 """
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
-from sqlalchemy.orm import attributes
+from sqlalchemy import (create_engine, Column, Integer, String, select, case,
+    func)
+from sqlalchemy.orm import sessionmaker, MapperExtension, aliased
 from sqlalchemy.ext.declarative import declarative_base
 
 engine = create_engine('sqlite://', echo=True)
index 1c88c88e82b8fdfa43850de37daba9bb649ccc5a..79a8b3fa393dcc42632187c79371591a8632b69b 100644 (file)
@@ -1,7 +1,8 @@
 """illustrates one way to use a custom pickler that is session-aware."""
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer, String, PickleType
+from sqlalchemy.orm import (mapper, create_session, MapperExtension,
+    class_mapper, EXT_CONTINUE)
 from sqlalchemy.orm.session import object_session
 from cStringIO import StringIO
 from pickle import Pickler, Unpickler
@@ -28,7 +29,7 @@ class MyPickler(object):
         if getattr(obj, "id", None) is None:
             sess = MyPickler.sessions.current
             newsess = create_session(bind=sess.connection(class_mapper(Bar)))
-            newsess.save(obj)
+            newsess.add(obj)
             newsess.flush()
         key = "%s:%s" % (type(obj).__name__, obj.id)
         return key
@@ -74,9 +75,9 @@ mapper(Bar, bar_table)
 sess = create_session()
 f = Foo()
 f.bar = Bar('some bar')
-sess.save(f)
+sess.add(f)
 sess.flush()
-sess.clear()
+sess.expunge_all()
 
 del MyPickler.sessions.current
 
index 3823f4b7f0e3856d2e28e4032fe292fd232a33ac..6e09935cb1e36c66f029787234582adeb03da722 100644 (file)
@@ -20,8 +20,9 @@ the associated target object from those which associate with it.
 
 """
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer, String, and_
+from sqlalchemy.orm import (mapper, relation, create_session, class_mapper,
+    backref)
 
 metadata = MetaData('sqlite://')
 
@@ -124,11 +125,11 @@ a3 = o1.create_address()
 a3.street = '444 park ave.'
 
 sess = create_session()
-sess.save(u1)
-sess.save(o1)
+sess.add(u1)
+sess.add(o1)
 sess.flush()
 
-sess.clear()
+sess.expunge_all()
 
 # query objects, get their addresses
 
index 32600fcbf2a273e2f8aa8f486a732c1641abd820..f5dda2e39595c438d98738f9c547b172a50ed506 100644 (file)
@@ -19,8 +19,8 @@ For a more genericized version of this example, see
 poly_assoc_generic.py.
 """
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
+from sqlalchemy.orm import mapper, relation, create_session, class_mapper
 
 metadata = MetaData('sqlite://')
 
@@ -137,11 +137,11 @@ o1.address = Address()
 o1.address.street = '444 park ave.'
 
 sess = create_session()
-sess.save(u1)
-sess.save(o1)
+sess.add(u1)
+sess.add(o1)
 sess.flush()
 
-sess.clear()
+sess.expunge_all()
 
 # query objects, get their addresses
 
index 8cc3edf60952610eccdb4b5b8367872078cc684f..233df51958dffa022fc57cb6f24b423224a2da75 100644 (file)
@@ -6,8 +6,8 @@ function "association" which creates a new polymorphic association
 "interface".
 """
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
+from sqlalchemy.orm import mapper, relation, create_session, class_mapper
 
 metadata = MetaData('sqlite://')
 
@@ -133,11 +133,11 @@ o1.address = Address()
 o1.address.street = '444 park ave.'
 
 sess = create_session()
-sess.save(u1)
-sess.save(o1)
+sess.add(u1)
+sess.add(o1)
 sess.flush()
 
-sess.clear()
+sess.expunge_all()
 
 # query objects, get their addresses
 
index 5f12e9a3d73c67467de9d51045bd387f5e75c1f6..c50513b55559ad14d7e600d352a65c7576dfd3f9 100644 (file)
@@ -1,5 +1,5 @@
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
+from sqlalchemy.orm import mapper, create_session, polymorphic_union
 
 metadata = MetaData()
 
@@ -56,11 +56,11 @@ m1 = Manager("pointy haired boss", "manager1")
 e1 = Engineer("wally", "engineer1")
 e2 = Engineer("dilbert", "engineer2")
 
-session.save(m1)
-session.save(e1)
-session.save(e2)
+session.add(m1)
+session.add(e1)
+session.add(e2)
 session.flush()
 
-employees = session.query(Employee).select()
+employees = session.query(Employee)
 print [e for e in employees]
 
index 4f3aeb7d2634a044e535bbbf32d987a20ddc14ca..ea56ffed1f36988e726ff2f19c0937e096351447 100644 (file)
@@ -1,5 +1,5 @@
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
+from sqlalchemy.orm import mapper, relation, create_session
 import sets
 
 # this example illustrates a polymorphic load of two classes
@@ -58,12 +58,12 @@ class Company(object):
 
 person_join = people.outerjoin(engineers).outerjoin(managers)
 
-person_mapper = mapper(Person, people, select_table=person_join,polymorphic_on=people.c.type, polymorphic_identity='person')
+person_mapper = mapper(Person, people, polymorphic_on=people.c.type, polymorphic_identity='person')
 mapper(Engineer, engineers, inherits=person_mapper, polymorphic_identity='engineer')
 mapper(Manager, managers, inherits=person_mapper, polymorphic_identity='manager')
 
 mapper(Company, companies, properties={
-    'employees': relation(Person, lazy=False, private=True, backref='company')
+    'employees': relation(Person, lazy=False, backref='company', cascade="all, delete-orphan")
 })
 
 session = create_session(echo_uow=False)
@@ -73,30 +73,30 @@ c.employees.append(Engineer(name='dilbert', status='BBA', engineer_name='enginee
 c.employees.append(Person(name='joesmith', status='HHH'))
 c.employees.append(Engineer(name='wally', status='CGG', engineer_name='engineer2', primary_language='python'))
 c.employees.append(Manager(name='jsmith', status='ABA', manager_name='manager2'))
-session.save(c)
+session.add(c)
 
 print session.new
 session.flush()
-session.clear()
+session.expunge_all()
 
 c = session.query(Company).get(1)
 for e in c.employees:
-    print e, e._instance_key, e.company
+    print e, e._sa_instance_state.key, e.company
 assert sets.Set([e.name for e in c.employees]) == sets.Set(['pointy haired boss', 'dilbert', 'joesmith', 'wally', 'jsmith'])
 print "\n"
 
-dilbert = session.query(Person).get_by(name='dilbert')
-dilbert2 = session.query(Engineer).get_by(name='dilbert')
+dilbert = session.query(Person).filter_by(name='dilbert').one()
+dilbert2 = session.query(Engineer).filter_by(name='dilbert').one()
 assert dilbert is dilbert2
 
 dilbert.engineer_name = 'hes dibert!'
 
 session.flush()
-session.clear()
+session.expunge_all()
 
 c = session.query(Company).get(1)
 for e in c.employees:
-    print e, e._instance_key
+    print e, e._sa_instance_state.key
 
 session.delete(c)
 session.flush()
index dfc4264169f0563c9eb1cf68d18336554f8d672b..5a4f5c841357f83f586c92bff4045f86f425b3d6 100644 (file)
@@ -1,5 +1,5 @@
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
+from sqlalchemy.orm import mapper, relation, create_session
 
 metadata = MetaData('sqlite://')
 metadata.bind.echo = 'debug'
@@ -48,7 +48,7 @@ engineer_mapper = mapper(Engineer, inherits=person_mapper, polymorphic_identity=
 
 
 mapper(Company, companies, properties={
-    'employees': relation(Person, lazy=True, private=True, backref='company')
+    'employees': relation(Person, lazy=True, backref='company')
 })
 
 session = create_session()
@@ -58,29 +58,29 @@ c.employees.append(Engineer(name='dilbert', status='BBA', engineer_name='enginee
 c.employees.append(Person(name='joesmith', status='HHH'))
 c.employees.append(Engineer(name='wally', status='CGG', engineer_name='engineer2', primary_language='python'))
 c.employees.append(Manager(name='jsmith', status='ABA', manager_name='manager2'))
-session.save(c)
+session.add(c)
 session.flush()
 
-session.clear()
+session.expunge_all()
 
 c = session.query(Company).get(1)
 for e in c.employees:
-    print e, e._instance_key, e.company
+    print e, e._sa_instance_state.key, e.company
 
 print "\n"
 
-dilbert = session.query(Person).get_by(name='dilbert')
-dilbert2 = session.query(Engineer).get_by(name='dilbert')
+dilbert = session.query(Person).filter_by(name='dilbert').one()
+dilbert2 = session.query(Engineer).filter_by(name='dilbert').one()
 assert dilbert is dilbert2
 
 dilbert.engineer_name = 'hes dibert!'
 
 session.flush()
-session.clear()
+session.expunge_all()
 
 c = session.query(Company).get(1)
 for e in c.employees:
-    print e, e._instance_key
+    print e, e._sa_instance_state.key
 
 session.delete(c)
 session.flush()
index 802aa0ea9005f3c25b04013c96e565bb493982b8..c482d82560f321ca0fb357aaa1fc042050213dc9 100644 (file)
@@ -28,11 +28,10 @@ Includes:
  * a standalone operator example.
 
 The implementation is limited to only public, well known
-and simple to use extension points, with the exception
-of one temporary monkeypatch in the DDL extension.  
-Future SQLAlchemy expansion points may allow more seamless
-integration of some features.
+and simple to use extension points. Future SQLAlchemy
+expansion points may allow more seamless integration of
+some features.
+
 """
 
 from sqlalchemy.orm.interfaces import AttributeExtension
@@ -227,8 +226,9 @@ def GISColumn(*args, **kw):
 
 # illustrate usage
 if __name__ == '__main__':
-    from sqlalchemy import *
-    from sqlalchemy.orm import *
+    from sqlalchemy import (create_engine, MetaData, Column, Integer, String,
+        func, literal, select)
+    from sqlalchemy.orm import sessionmaker, column_property
     from sqlalchemy.ext.declarative import declarative_base
 
     engine = create_engine('postgres://scott:tiger@localhost/gistest', echo=True)
index 0a9e992a32be70deea0a654aeaa8b8da3aba20c8..45a019f135df6cfb18d25b64d92a3a3f03654606 100644 (file)
@@ -18,8 +18,9 @@ To set up a sharding system, you need:
 """
 
 # step 1. imports
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import (create_engine, MetaData, Table, Column, Integer,
+    String, ForeignKey, Float, DateTime)
+from sqlalchemy.orm import sessionmaker, mapper, relation
 from sqlalchemy.orm.shard import ShardedSession
 from sqlalchemy.sql import operators
 from sqlalchemy import sql
@@ -27,10 +28,10 @@ import datetime
 
 # step 2. databases
 echo = True
-db1 = create_engine('sqlite:///shard1.db', echo=echo)
-db2 = create_engine('sqlite:///shard2.db', echo=echo)
-db3 = create_engine('sqlite:///shard3.db', echo=echo)
-db4 = create_engine('sqlite:///shard4.db', echo=echo)
+db1 = create_engine('sqlite://', echo=echo)
+db2 = create_engine('sqlite://', echo=echo)
+db3 = create_engine('sqlite://', echo=echo)
+db4 = create_engine('sqlite://', echo=echo)
 
 
 # step 3. create session function.  this binds the shard ids
@@ -195,6 +196,6 @@ assert t.reports[0].temperature == 80.0
 north_american_cities = sess.query(WeatherLocation).filter(WeatherLocation.continent == 'North America')
 assert [c.city for c in north_american_cities] == ['New York', 'Toronto']
 
-asia_and_europe = sess.query(WeatherLocation).filter(WeatherLocation.continent.in_('Europe', 'Asia'))
+asia_and_europe = sess.query(WeatherLocation).filter(WeatherLocation.continent.in_(['Europe', 'Asia']))
 assert set([c.city for c in asia_and_europe]) == set(['Tokyo', 'London', 'Dublin'])
 
index 4065337c2ea04859e7f79e299d47f3a982d5f8dd..6180fa3034c004415130b4dbe296b97428a01a18 100644 (file)
@@ -29,8 +29,8 @@ Note: Something much like 'comparable_property' is slated for inclusion in a
       future version of SQLAlchemy.
 """
 
-from sqlalchemy.orm.interfaces import PropComparator, MapperProperty
-from sqlalchemy.orm import session as sessionlib, comparable_property
+from sqlalchemy.orm.interfaces import PropComparator
+from sqlalchemy.orm import comparable_property
 
 # Using the VerticalPropertyDictMixin from the base example
 from dictlike import VerticalPropertyDictMixin
@@ -131,7 +131,9 @@ class PolymorphicVerticalProperty(object):
 
 
 if __name__ == '__main__':
-    from sqlalchemy import *
+    from sqlalchemy import (MetaData, Table, Column, Integer, Unicode,
+        ForeignKey, UnicodeText, and_, not_, or_, String, Boolean, cast, text,
+        null, case)
     from sqlalchemy.orm import mapper, relation, create_session
     from sqlalchemy.orm.collections import attribute_mapped_collection
 
@@ -198,9 +200,9 @@ if __name__ == '__main__':
     stoat[u'cuteness'] = 7
     stoat[u'weasel-like'] = True
 
-    session.save(stoat)
+    session.add(stoat)
     session.flush()
-    session.clear()
+    session.expunge_all()
 
     critter = session.query(Animal).filter(Animal.name == u'stoat').one()
     print critter[u'color']
@@ -217,14 +219,14 @@ if __name__ == '__main__':
     marten[u'cuteness'] = 5
     marten[u'weasel-like'] = True
     marten[u'poisonous'] = False
-    session.save(marten)
+    session.add(marten)
 
     shrew = Animal(u'shrew')
     shrew[u'cuteness'] = 5
     shrew[u'weasel-like'] = False
     shrew[u'poisonous'] = True
 
-    session.save(shrew)
+    session.add(shrew)
     session.flush()
 
     q = (session.query(Animal).
index 5f478d7d0558c1a2c1317030bac62fbe056ba153..1e1635ed763ce6d0007c3877f26175f1cdd4dbbd 100644 (file)
@@ -122,7 +122,8 @@ class VerticalPropertyDictMixin(object):
 
 
 if __name__ == '__main__':
-    from sqlalchemy import *
+    from sqlalchemy import (MetaData, Table, Column, Integer, Unicode,
+        ForeignKey, UnicodeText, and_, not_)
     from sqlalchemy.orm import mapper, relation, create_session
     from sqlalchemy.orm.collections import attribute_mapped_collection
 
@@ -183,9 +184,9 @@ if __name__ == '__main__':
     # stoat.facts collection:
     print stoat.facts[u'color']
 
-    session.save(stoat)
+    session.add(stoat)
     session.flush()
-    session.clear()
+    session.expunge_all()
 
     critter = session.query(Animal).filter(Animal.name == u'stoat').one()
     print critter[u'color']
@@ -201,17 +202,17 @@ if __name__ == '__main__':
     marten = Animal(u'marten')
     marten[u'color'] = u'brown'
     marten[u'cuteness'] = u'somewhat'
-    session.save(marten)
+    session.add(marten)
 
     shrew = Animal(u'shrew')
     shrew[u'cuteness'] = u'somewhat'
     shrew[u'poisonous-part'] = u'saliva'
-    session.save(shrew)
+    session.add(shrew)
 
     loris = Animal(u'slow loris')
     loris[u'cuteness'] = u'fairly'
     loris[u'poisonous-part'] = u'elbows'
-    session.save(loris)
+    session.add(loris)
     session.flush()
 
     q = (session.query(Animal).
index 6c3a61919ef9140a40670dd1e3f6d93e88cc9696..4a8bf77871e1d28a9858d9c468ecb34c21c105c7 100644 (file)
@@ -2,8 +2,9 @@
 represented in distinct database rows.  This allows objects to be created with dynamically changing
 fields that are all persisted in a normalized fashion."""
 
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import (create_engine, MetaData, Table, Column, Integer, String,
+    ForeignKey, PickleType, DateTime, and_)
+from sqlalchemy.orm import mapper, relation, sessionmaker, scoped_session
 from sqlalchemy.orm.collections import mapped_collection
 import datetime
 
index 56f358db8277530b4499067ea76b2a96e488f9b5..859419022de2616a5b222ea5e68175e8218ad442 100644 (file)
@@ -2204,13 +2204,17 @@ class _Case(ColumnElement):
             whenlist = [(_literal_as_binds(c).self_group(), _literal_as_binds(r)) for (c, r) in whens]
         else:
             whenlist = [(_no_literals(c).self_group(), _literal_as_binds(r)) for (c, r) in whens]
-            
+
         if whenlist:
             type_ = list(whenlist[-1])[-1].type
         else:
             type_ = None
-            
-        self.value = value
+
+        if value is None:
+            self.value = None
+        else:
+            self.value = _literal_as_binds(value)
+
         self.type = type_
         self.whens = whenlist
         if else_ is not None:
@@ -2236,7 +2240,7 @@ class _Case(ColumnElement):
 
     @property
     def _from_objects(self):
-        return itertools.chain(*[x._from_objects for x in self.get_children()])
+        return list(itertools.chain(*[x._from_objects for x in self.get_children()]))
 
 class Function(ColumnElement, FromClause):
     """Describe a SQL function."""