]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 5 Nov 2005 03:14:33 +0000 (03:14 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 5 Nov 2005 03:14:33 +0000 (03:14 +0000)
doc/build/content/sqlconstruction.myt
test/select.py

index 201358b2c02f42ce76754e3f652630c082dce3c7..8cf117f80d54775e393b3b7e70777714a87dac55 100644 (file)
@@ -14,8 +14,7 @@
         users = Table('users', db,
             Column('user_id', Integer, primary_key = True),
             Column('user_name', String(40)),
-            Column('fullname', String(100)),
-            Column('email_address', String(80))
+            Column('password', String(80))
         )
 
         # a table that stores mailing addresses associated with a specific user
             # then, call execute on the Select object:
 <&formatting.myt:poplink&>c = s.execute() 
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address FROM users
+SELECT users.user_id, users.user_name, users.password FROM users
 {}
 </&>
             # the SQL text of any clause object can also be viewed via the str() call:
             >>> str(s)
-            SELECT users.user_id, users.user_name, users.fullname, users.email_address FROM users
+            SELECT users.user_id, users.user_name, users.password FROM users
 
         </&>
         <p>The object returned by the execute call is a <span class="codeline">sqlalchemy.engine.ResultProxy</span> object, which acts very much like a DBAPI <span class="codeline">cursor</span> object in the context of a result set, except that the rows returned can address their columns by ordinal position, column name, or even column object:</p>
@@ -71,7 +70,7 @@ SELECT users.user_id, users.user_name, users.fullname, users.email_address FROM
             # select rows, get resulting ResultProxy object
 <&formatting.myt:poplink&>c = users.select().execute()  
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address FROM users
+SELECT users.user_id, users.user_name, users.password FROM users
 {}
 </&>
             # get one row
@@ -84,7 +83,7 @@ SELECT users.user_id, users.user_name, users.fullname, users.email_address FROM
             user_name = row['user_name']
             
             # or column object
-            fullname = row[users.c.fullname]
+            password = row[users.c.password]
             
             # rowproxy object also supports fetchall()
             rows = c.fetchall()
@@ -143,8 +142,8 @@ SELECT users.user_id, users.user_name FROM users
                 # full tables
 <&formatting.myt:poplink&>c = select([users, addresses]).execute()  
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname
-users.email_address, addresses.address_id, addresses.user_id, 
+SELECT users.user_id, users.user_name, users.password
+addresses.address_id, addresses.user_id, 
 addresses.street, addresses.city, addresses.state, addresses.zip
 FROM users, addresses
 {}
@@ -152,8 +151,8 @@ FROM users, addresses
                 # combinations
 <&formatting.myt:poplink&>c = select([users, addresses.c.zip]).execute()  
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname
-users.email_address, addresses.zip FROM users, addresses
+SELECT users.user_id, users.user_name, users.password
+addresses.zip FROM users, addresses
 {}
 </&>                
             </&>            
@@ -167,9 +166,8 @@ users.email_address, addresses.zip FROM users, addresses
             <&|formatting.myt:code&>
 <&formatting.myt:poplink&>c = users.select(users.c.user_id == 7).execute()  
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, 
-users.email_address FROM users
-WHERE users.user_id = :users_user_id
+SELECT users.user_id, users.user_name, users.password, 
+FROM users WHERE users.user_id = :users_user_id
 {'users_user_id': 7}                
 </&>                
             </&>
@@ -180,15 +178,15 @@ WHERE users.user_id = :users_user_id
                 # another comparison operator
 <&formatting.myt:poplink&>c = select([users], users.c.user_id>7).execute() 
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname
-users.email_address FROM users WHERE users.user_id > :users_user_id
+SELECT users.user_id, users.user_name, users.password
+FROM users WHERE users.user_id > :users_user_id
 {'users_user_id': 7}
 </&>
 
                 # OR keyword
 <&formatting.myt:poplink&>c = users.select(or_(users.c.user_name=='jack', users.c.user_name=='ed')).execute()  
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address
+SELECT users.user_id, users.user_name, users.password 
 FROM users WHERE users.user_name = :users_user_name 
 OR users.user_name = :users_user_name_1
 {'users_user_name_1': 'ed', 'users_user_name': 'jack'}
@@ -196,25 +194,25 @@ OR users.user_name = :users_user_name_1
 </&>
 
                 # AND keyword
-<&formatting.myt:poplink&>c = users.select(and_(users.c.user_name=='jack', users.c.fullname=='ed')).execute()  
+<&formatting.myt:poplink&>c = users.select(and_(users.c.user_name=='jack', users.c.password=='dog')).execute()  
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address
+SELECT users.user_id, users.user_name, users.password
 FROM users WHERE users.user_name = :users_user_name 
-AND users.fullname = :users_fullname
-{'users_user_name': 'jack', 'users_fullname': 'ed'}
+AND users.password = :users_password
+{'users_user_name': 'jack', 'users_password': 'dog'}
 </&>
 
                 # IN clause
 <&formatting.myt:poplink&>c = users.select(users.c.user_name.in_('jack', 'ed', 'fred')).execute()  
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address
+SELECT users.user_id, users.user_name, users.password
 FROM users WHERE users.user_name IN ('jack', 'ed', 'fred')
 </&>
                 
                 # join users and addresses together
 <&formatting.myt:poplink&>c = select([users, addresses], users.c.user_id==addresses.c.address_id).execute()  
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address, 
+SELECT users.user_id, users.user_name, users.password,  
 addresses.address_id, addresses.user_id, addresses.street, addresses.city, 
 addresses.state, addresses.zip
 FROM users, addresses
@@ -230,7 +228,7 @@ WHERE users.user_id = addresses.address_id
                     users.c.user_name=='fred'
                 )).execute()
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address
+SELECT users.user_id, users.user_name, users.password
 FROM users, addresses WHERE users.user_id = addresses.user_id 
 AND users.user_name = :users_user_name
 {'users_user_name': 'fred'}                
@@ -252,19 +250,19 @@ AND users.user_name = :users_user_name
         <P>The ORDER BY clause of a select statement can be specified as individual columns to order by within an array     specified via the <span class="codeline">order_by</span> parameter, and optional usage of the asc() and desc() functions:
             <&|formatting.myt:code &>
                 # straight order by
-<&formatting.myt:poplink&>c = users.select(order_by=[users.c.fullname]).execute() 
+<&formatting.myt:poplink&>c = users.select(order_by=[users.c.user_name]).execute() 
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address
-FROM users ORDER BY users.fullname                
+SELECT users.user_id, users.user_name, users.password
+FROM users ORDER BY users.user_name                
 </&>        
                 # descending/ascending order by on multiple columns
 <&formatting.myt:poplink&>c = users.select(
                         users.c.user_name>'J', 
-                        order_by=[desc(users.c.fullname), asc(users.c.user_name)]).execute() 
+                        order_by=[desc(users.c.user_id), asc(users.c.user_name)]).execute() 
 <&|formatting.myt:codepopper, link="sql" &>
-SELECT users.user_id, users.user_name, users.fullname, users.email_address
+SELECT users.user_id, users.user_name, users.password
 FROM users WHERE users.user_name > :users_user_name 
-ORDER BY users.fullname DESC, users.user_name ASC
+ORDER BY users.user_id DESC, users.user_name ASC
 {'users_user_name':'J'}
 </&>        
             </&>        
index 86b9861d6505f365d21b6a57f02bb1583ec3b99a..b8e4f58ef08562022234e0da2bf2ea7a775063b0 100644 (file)
@@ -38,6 +38,22 @@ table4 = Table(
     schema = 'remote_owner'
 )
 
+users = Table('users', db,
+    Column('user_id', Integer, primary_key = True),
+    Column('user_name', String(40)),
+    Column('password', String(10)),
+)
+
+addresses = Table('addresses', db,
+    Column('address_id', Integer, primary_key = True),
+    Column('user_id', Integer, ForeignKey("users.user_id")),
+    Column('street', String(100)),
+    Column('city', String(80)),
+    Column('state', String(2)),
+    Column('zip', String(10))
+)
+
+
 class SQLTest(PersistTest):
     def runtest(self, clause, result, engine = None, params = None, checkparams = None):
         c = clause.compile(engine, params)
@@ -63,16 +79,16 @@ class SelectTest(SQLTest):
 myothertable.othername FROM mytable, myothertable")
 
     def testsubquery(self):
-        s = select([table], table.c.name == 'jack')
-        self.runtest(
-            select(
-                [s],
-                s.c.id == 7
-            )
-            ,
-        "SELECT myid, name, description FROM (SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.name = :mytable_name) WHERE myid = :myid")
+#        s = select([table], table.c.name == 'jack')
#       self.runtest(
+  #          select(
+   #             [s],
+#                s.c.id == 7
+#            )
#           ,
+  #      "SELECT myid, name, description FROM (SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.name = :mytable_name) WHERE myid = :myid")
         
-        sq = Select([table])
+        sq = select([table])
         self.runtest(
             sq.select(),
             "SELECT myid, name, description FROM (SELECT mytable.myid, mytable.name, mytable.description FROM mytable)"
@@ -315,19 +331,25 @@ FROM mytable, myothertable WHERE mytable.myid = myothertable.otherid AND mytable
 
     def testcorrelatedsubquery(self):
         self.runtest(
-            select([table], table.c.id == select([table2.c.id], table.c.name == table2.c.name)),
+            table.select(table.c.id == select([table2.c.id], table.c.name == table2.c.name)),
             "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid = (SELECT myothertable.otherid FROM myothertable WHERE mytable.name = myothertable.othername)"
         )
 
         self.runtest(
-            select([table], exists([1], table2.c.id == table.c.id)),
+            table.select(exists([1], table2.c.id == table.c.id)),
             "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE EXISTS (SELECT 1 FROM myothertable WHERE myothertable.otherid = mytable.myid)"
         )
 
-        s = subquery('sq2', [table], exists([1], table2.c.id == table.c.id))
+        talias = table.alias('ta')
+        s = subquery('sq2', [talias], exists([1], table2.c.id == talias.c.id))
         self.runtest(
             select([s, table])
-        ,"SELECT sq2.myid, sq2.name, sq2.description, mytable.myid, mytable.name, mytable.description FROM (SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE EXISTS (SELECT 1 FROM myothertable WHERE myothertable.otherid = mytable.myid)) sq2, mytable")
+            ,"SELECT sq2.myid, sq2.name, sq2.description, mytable.myid, mytable.name, mytable.description FROM (SELECT ta.myid, ta.name, ta.description FROM mytable ta WHERE EXISTS (SELECT 1 FROM myothertable WHERE myothertable.otherid = ta.myid)) sq2, mytable")
+
+        s = select([addresses.c.street], addresses.c.user_id==users.c.user_id).alias('s')
+        self.runtest(
+            select([users, s.c.street], from_obj=[s]),
+            """SELECT users.user_id, users.user_name, users.password, s.street FROM users, (SELECT addresses.street FROM addresses WHERE addresses.user_id = users.user_id) s""")
 
     def testin(self):
         self.runtest(select([table], table.c.id.in_(1, 2, 3)),