diff options
author | Bruce Momjian <bruce@momjian.us> | 2000-10-02 03:46:24 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2000-10-02 03:46:24 +0000 |
commit | 439643a66850af9842660a167c7fce37a3b3116a (patch) | |
tree | b3e69846418f5c40607819b0c665e2a664ca366f /src/interfaces/python/tutorial/basics.py | |
parent | f36e7ff0927bdae6ea477cb64be9088307e5bddd (diff) | |
download | postgresql-439643a66850af9842660a167c7fce37a3b3116a.tar.gz postgresql-439643a66850af9842660a167c7fce37a3b3116a.zip |
Add missing python files.
Diffstat (limited to 'src/interfaces/python/tutorial/basics.py')
-rwxr-xr-x | src/interfaces/python/tutorial/basics.py | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/src/interfaces/python/tutorial/basics.py b/src/interfaces/python/tutorial/basics.py new file mode 100755 index 00000000000..313258ba24e --- /dev/null +++ b/src/interfaces/python/tutorial/basics.py @@ -0,0 +1,296 @@ +#! /usr/bin/env python +# basics.py - basic SQL commands tutorial +# inspired from the Postgres95 tutorial +# adapted to Python 1995 by Pascal ANDRE + +print """ +__________________________________________________________________ +MODULE BASICS.PY : BASIC POSTGRES SQL COMMANDS TUTORIAL + +This module is designed for being imported from python prompt + +In order to run the samples included here, first create a connection +using : cnx = advanced.DB(...) + +The "..." should be replaced with whatever arguments you need to open an +existing database. Usually all you need is the name of the database and, +in fact, if it is the same as your login name, you can leave it empty. + +then start the demo with: basics.demo(cnx) +__________________________________________________________________ +""" + +from pg import DB +import sys + +# waits for a key +def wait_key(): + print "Press <enter>" + sys.stdin.read(1) + +# table creation commands +def create_table(pgcnx): + print "-----------------------------" + print "-- Creating a table:" + print "-- a CREATE TABLE is used to create base tables. POSTGRES" + print "-- SQL has its own set of built-in types. (Note that" + print "-- keywords are case-insensitive but identifiers are " + print "-- case-sensitive.)" + print "-----------------------------" + print + print "Sending query :" + print "CREATE TABLE weather (" + print " city varchar(80)," + print " temp_lo int," + print " temp_hi int," + print " prcp float8," + print " date date" + print ")" + pgcnx.query("""CREATE TABLE weather (city varchar(80), temp_lo int, + temp_hi int, prcp float8, date date)""") + print + print "Sending query :" + print "CREATE TABLE cities (" + print " name varchar(80)," + print " location point" + print ")" + pgcnx.query("""CREATE TABLE cities ( + name varchar(80), + location point)""") + +# data insertion commands +def insert_data(pgcnx): + print "-----------------------------" + print "-- Inserting data:" + print "-- an INSERT statement is used to insert a new row into" + print "-- a table. There are several ways you can specify what" + print "-- columns the data should go to." + print "-----------------------------" + print + print "-- 1. the simplest case is when the list of value correspond to" + print "-- the order of the columns specified in CREATE TABLE." + print + print "Sending query :" + print "INSERT INTO weather " + print " VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994')" + pgcnx.query("""INSERT INTO weather + VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994')""") + print + print "Sending query :" + print "INSERT INTO cities " + print " VALUES ('San Francisco', '(-194.0, 53.0)')" + pgcnx.query("""INSERT INTO cities + VALUES ('San Francisco', '(-194.0, 53.0)')""") + print + wait_key() + print "-- 2. you can also specify what column the values correspond " + print " to. (The columns can be specified in any order. You may " + print " also omit any number of columns. eg. unknown precipitation" + print " below)" + print "Sending query :" + print "INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)" + print " VALUES ('San Francisco', 43, 57, 0.0, '11/29/1994')" + pgcnx.query("INSERT INTO weather (date, city, temp_hi, temp_lo)" \ + "VALUES ('11/29/1994', 'Hayward', 54, 37)") + +# direct selection commands +def select_data1(pgcnx): + print "-----------------------------" + print "-- Retrieving data:" + print "-- a SELECT statement is used for retrieving data. The " + print "-- basic syntax is:" + print "-- SELECT columns FROM tables WHERE predicates" + print "-----------------------------" + print + print "-- a simple one would be the query:" + print "SELECT * FROM weather" + print + print "The result is :" + q = pgcnx.query("SELECT * FROM weather") + print q + print + print "-- you may also specify expressions in the target list (the " + print "-- 'AS column' specifies the column name of the result. It is " + print "-- optional.)" + print "The query :" + print " SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date " + print " FROM weather" + print "Gives :" + print pgcnx.query("""SELECT city, (temp_hi+temp_lo)/2 + AS temp_avg, date FROM weather""") + print + print "-- if you want to retrieve rows that satisfy certain condition" + print "-- (ie. a restriction), specify the condition in WHERE. The " + print "-- following retrieves the weather of San Francisco on rainy " + print "-- days." + print "SELECT *" + print "FROM weather" + print "WHERE city = 'San Francisco' " + print " and prcp > 0.0" + print pgcnx.query("""SELECT * FROM weather WHERE city = 'San Francisco' + AND prcp > 0.0""") + print + print "-- here is a more complicated one. Duplicates are removed when " + print "-- DISTINCT is specified. ORDER BY specifies the column to sort" + print "-- on. (Just to make sure the following won't confuse you, " + print "-- DISTINCT and ORDER BY can be used separately.)" + print "SELECT DISTINCT city" + print "FROM weather" + print "ORDER BY city;" + print pgcnx.query("SELECT DISTINCT city FROM weather ORDER BY city") + +# selection to a temporary table +def select_data2(pgcnx): + print "-----------------------------" + print "-- Retrieving data into other classes:" + print "-- a SELECT ... INTO statement can be used to retrieve " + print "-- data into another class." + print "-----------------------------" + print + print "The query :" + print "SELECT * INTO TABLE temptab " + print "FROM weather" + print "WHERE city = 'San Francisco' " + print " and prcp > 0.0" + pgcnx.query("""SELECT * INTO TABLE temptab FROM weather + WHERE city = 'San Francisco' and prcp > 0.0""") + print "Fills the table temptab, that can be listed with :" + print "SELECT * from temptab" + print pgcnx.query("SELECT * from temptab") + +# aggregate creation commands +def create_aggregate(pgcnx): + print "-----------------------------" + print "-- Aggregates" + print "-----------------------------" + print + print "Let's consider the query :" + print "SELECT max(temp_lo)" + print "FROM weather;" + print pgcnx.query("SELECT max(temp_lo) FROM weather") + print + print "-- Aggregate with GROUP BY" + print "SELECT city, max(temp_lo)" + print "FROM weather " + print "GROUP BY city;" + print pgcnx.query( """SELECT city, max(temp_lo) + FROM weather GROUP BY city""") + +# table join commands +def join_table(pgcnx): + print "-----------------------------" + print "-- Joining tables:" + print "-- queries can access multiple tables at once or access" + print "-- the same table in such a way that multiple instances" + print "-- of the table are being processed at the same time." + print "-----------------------------" + print + print "-- suppose we want to find all the records that are in the " + print "-- temperature range of other records. W1 and W2 are aliases " + print "--for weather." + print + print "SELECT W1.city, W1.temp_lo, W1.temp_hi, " + print " W2.city, W2.temp_lo, W2.temp_hi" + print "FROM weather W1, weather W2" + print "WHERE W1.temp_lo < W2.temp_lo " + print " and W1.temp_hi > W2.temp_hi" + print + print pgcnx.query("""SELECT W1.city, W1.temp_lo, W1.temp_hi, + W2.city, W2.temp_lo, W2.temp_hi FROM weather W1, weather W2 + WHERE W1.temp_lo < W2.temp_lo and W1.temp_hi > W2.temp_hi""") + print + print "-- let's join two tables. The following joins the weather table" + print "-- and the cities table." + print + print "SELECT city, location, prcp, date" + print "FROM weather, cities" + print "WHERE name = city" + print + print pgcnx.query("""SELECT city, location, prcp, date FROM weather, cities + WHERE name = city""") + print + print "-- since the column names are all different, we don't have to " + print "-- specify the table name. If you want to be clear, you can do " + print "-- the following. They give identical results, of course." + print + print "SELECT w.city, c.location, w.prcp, w.date" + print "FROM weather w, cities c" + print "WHERE c.name = w.city;" + print + print pgcnx.query("""SELECT w.city, c.location, w.prcp, w.date + FROM weather w, cities c WHERE c.name = w.city""") + +# data updating commands +def update_data(pgcnx): + print "-----------------------------" + print "-- Updating data:" + print "-- an UPDATE statement is used for updating data. " + print "-----------------------------" + print + print "-- suppose you discover the temperature readings are all off by" + print "-- 2 degrees as of Nov 28, you may update the data as follow:" + print + print "UPDATE weather" + print " SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2" + print " WHERE date > '11/28/1994'" + print + pgcnx.query("""UPDATE weather + SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2 + WHERE date > '11/28/1994'""") + print + print "SELECT * from weather" + print pgcnx.query("SELECT * from weather") + +# data deletion commands +def delete_data(pgcnx): + print "-----------------------------" + print "-- Deleting data:" + print "-- a DELETE statement is used for deleting rows from a " + print "-- table." + print "-----------------------------" + print + print "-- suppose you are no longer interested in the weather of " + print "-- Hayward, you can do the following to delete those rows from" + print "-- the table" + print + print "DELETE FROM weather WHERE city = 'Hayward'" + pgcnx.query("DELETE FROM weather WHERE city = 'Hayward'") + print + print "SELECT * from weather" + print + print pgcnx.query("SELECT * from weather") + print + print "-- you can also delete all the rows in a table by doing the " + print "-- following. (This is different from DROP TABLE which removes " + print "-- the table in addition to the removing the rows.)" + print + print "DELETE FROM weather" + pgcnx.query("DELETE FROM weather") + print + print "SELECT * from weather" + print pgcnx.query("SELECT * from weather") + +# table removal commands +def remove_table(pgcnx): + print "-----------------------------" + print "-- Removing the tables:" + print "-- DROP TABLE is used to remove tables. After you have" + print "-- done this, you can no longer use those tables." + print "-----------------------------" + print + print "DROP TABLE weather, cities, temptab" + pgcnx.query("DROP TABLE weather, cities, temptab") + +# main demo function +def demo(pgcnx): + create_table(pgcnx) + wait_key() + insert_data(pgcnx) + wait_key() + select_data1(pgcnx) + select_data2(pgcnx) + create_aggregate(pgcnx) + join_table(pgcnx) + update_data(pgcnx) + delete_data(pgcnx) + remove_table(pgcnx) |