summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/association/basic_association.py19
-rw-r--r--examples/association/proxied_association.py7
-rw-r--r--examples/collections/large_collection.py14
-rw-r--r--examples/custom_attributes/custom_management.py12
-rw-r--r--examples/custom_attributes/listen_for_events.py6
-rw-r--r--examples/derived_attributes/attributes.py10
-rw-r--r--examples/dynamic_dict/dynamic_dict.py4
-rw-r--r--examples/elementtree/adjacency_list.py12
-rw-r--r--examples/elementtree/optimized_al.py12
-rw-r--r--examples/elementtree/pickle.py11
-rw-r--r--examples/graphs/graph1.py8
-rw-r--r--examples/nested_sets/nested_sets.py6
-rw-r--r--examples/pickle/custom_pickler.py11
-rw-r--r--examples/poly_assoc/poly_assoc.py11
-rw-r--r--examples/poly_assoc/poly_assoc_fk.py10
-rw-r--r--examples/poly_assoc/poly_assoc_generic.py10
-rw-r--r--examples/polymorph/concrete.py12
-rw-r--r--examples/polymorph/polymorph.py22
-rw-r--r--examples/polymorph/single.py20
-rw-r--r--examples/postgis/postgis.py14
-rw-r--r--examples/sharding/attribute_shard.py15
-rw-r--r--examples/vertical/dictlike-polymorphic.py16
-rw-r--r--examples/vertical/dictlike.py13
-rw-r--r--examples/vertical/vertical.py5
-rw-r--r--lib/sqlalchemy/sql/expression.py12
25 files changed, 155 insertions, 137 deletions
diff --git a/examples/association/basic_association.py b/examples/association/basic_association.py
index 8078a2bb9..a56d2383e 100644
--- a/examples/association/basic_association.py
+++ b/examples/association/basic_association.py
@@ -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()
diff --git a/examples/association/proxied_association.py b/examples/association/proxied_association.py
index ed3afd597..3a78e3adf 100644
--- a/examples/association/proxied_association.py
+++ b/examples/association/proxied_association.py
@@ -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()
diff --git a/examples/collections/large_collection.py b/examples/collections/large_collection.py
index 203aa6d23..2451ea582 100644
--- a/examples/collections/large_collection.py
+++ b/examples/collections/large_collection.py
@@ -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,
diff --git a/examples/custom_attributes/custom_management.py b/examples/custom_attributes/custom_management.py
index 707e182ba..b8ea70dfd 100644
--- a/examples/custom_attributes/custom_management.py
+++ b/examples/custom_attributes/custom_management.py
@@ -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
diff --git a/examples/custom_attributes/listen_for_events.py b/examples/custom_attributes/listen_for_events.py
index de28df5b3..3264b0246 100644
--- a/examples/custom_attributes/listen_for_events.py
+++ b/examples/custom_attributes/listen_for_events.py
@@ -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
+
diff --git a/examples/derived_attributes/attributes.py b/examples/derived_attributes/attributes.py
index f53badc74..4a1618985 100644
--- a/examples/derived_attributes/attributes.py
+++ b/examples/derived_attributes/attributes.py
@@ -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__
diff --git a/examples/dynamic_dict/dynamic_dict.py b/examples/dynamic_dict/dynamic_dict.py
index b47a6d68f..3846c2994 100644
--- a/examples/dynamic_dict/dynamic_dict.py
+++ b/examples/dynamic_dict/dynamic_dict.py
@@ -40,8 +40,8 @@ class MyProxyDict(object):
self.collection.append(value)
from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy import *
-from sqlalchemy.orm import *
+from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
+from sqlalchemy.orm import sessionmaker, dynamic_loader
Base = declarative_base(engine=create_engine('sqlite://'))
diff --git a/examples/elementtree/adjacency_list.py b/examples/elementtree/adjacency_list.py
index 706cc88a0..9efacad87 100644
--- a/examples/elementtree/adjacency_list.py
+++ b/examples/elementtree/adjacency_list.py
@@ -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()
diff --git a/examples/elementtree/optimized_al.py b/examples/elementtree/optimized_al.py
index 8b50f6805..39d35921a 100644
--- a/examples/elementtree/optimized_al.py
+++ b/examples/elementtree/optimized_al.py
@@ -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()
diff --git a/examples/elementtree/pickle.py b/examples/elementtree/pickle.py
index e7cd86984..53d2ee2b6 100644
--- a/examples/elementtree/pickle.py
+++ b/examples/elementtree/pickle.py
@@ -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
diff --git a/examples/graphs/graph1.py b/examples/graphs/graph1.py
index 8188d7c87..6122e65f1 100644
--- a/examples/graphs/graph1.py
+++ b/examples/graphs/graph1.py
@@ -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)
diff --git a/examples/nested_sets/nested_sets.py b/examples/nested_sets/nested_sets.py
index e83a263e9..fbb481759 100644
--- a/examples/nested_sets/nested_sets.py
+++ b/examples/nested_sets/nested_sets.py
@@ -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)
diff --git a/examples/pickle/custom_pickler.py b/examples/pickle/custom_pickler.py
index 1c88c88e8..79a8b3fa3 100644
--- a/examples/pickle/custom_pickler.py
+++ b/examples/pickle/custom_pickler.py
@@ -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
diff --git a/examples/poly_assoc/poly_assoc.py b/examples/poly_assoc/poly_assoc.py
index 3823f4b7f..6e09935cb 100644
--- a/examples/poly_assoc/poly_assoc.py
+++ b/examples/poly_assoc/poly_assoc.py
@@ -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
diff --git a/examples/poly_assoc/poly_assoc_fk.py b/examples/poly_assoc/poly_assoc_fk.py
index 32600fcbf..f5dda2e39 100644
--- a/examples/poly_assoc/poly_assoc_fk.py
+++ b/examples/poly_assoc/poly_assoc_fk.py
@@ -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
diff --git a/examples/poly_assoc/poly_assoc_generic.py b/examples/poly_assoc/poly_assoc_generic.py
index 8cc3edf60..233df5195 100644
--- a/examples/poly_assoc/poly_assoc_generic.py
+++ b/examples/poly_assoc/poly_assoc_generic.py
@@ -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
diff --git a/examples/polymorph/concrete.py b/examples/polymorph/concrete.py
index 5f12e9a3d..c50513b55 100644
--- a/examples/polymorph/concrete.py
+++ b/examples/polymorph/concrete.py
@@ -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]
diff --git a/examples/polymorph/polymorph.py b/examples/polymorph/polymorph.py
index 4f3aeb7d2..ea56ffed1 100644
--- a/examples/polymorph/polymorph.py
+++ b/examples/polymorph/polymorph.py
@@ -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()
diff --git a/examples/polymorph/single.py b/examples/polymorph/single.py
index dfc426416..5a4f5c841 100644
--- a/examples/polymorph/single.py
+++ b/examples/polymorph/single.py
@@ -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()
diff --git a/examples/postgis/postgis.py b/examples/postgis/postgis.py
index 802aa0ea9..c482d8256 100644
--- a/examples/postgis/postgis.py
+++ b/examples/postgis/postgis.py
@@ -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)
diff --git a/examples/sharding/attribute_shard.py b/examples/sharding/attribute_shard.py
index 0a9e992a3..45a019f13 100644
--- a/examples/sharding/attribute_shard.py
+++ b/examples/sharding/attribute_shard.py
@@ -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'])
diff --git a/examples/vertical/dictlike-polymorphic.py b/examples/vertical/dictlike-polymorphic.py
index 4065337c2..6180fa303 100644
--- a/examples/vertical/dictlike-polymorphic.py
+++ b/examples/vertical/dictlike-polymorphic.py
@@ -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).
diff --git a/examples/vertical/dictlike.py b/examples/vertical/dictlike.py
index 5f478d7d0..1e1635ed7 100644
--- a/examples/vertical/dictlike.py
+++ b/examples/vertical/dictlike.py
@@ -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).
diff --git a/examples/vertical/vertical.py b/examples/vertical/vertical.py
index 6c3a61919..4a8bf7787 100644
--- a/examples/vertical/vertical.py
+++ b/examples/vertical/vertical.py
@@ -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
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py
index 56f358db8..859419022 100644
--- a/lib/sqlalchemy/sql/expression.py
+++ b/lib/sqlalchemy/sql/expression.py
@@ -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."""