basics.py
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:10k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. #! /usr/local/bin/python
  2. # basics.py - basic SQL commands tutorial
  3. # inspired from the Postgres95 tutorial 
  4. # adapted to Python 1995 by Pascal ANDRE
  5. print "__________________________________________________________________"
  6. print "MODULE BASICS.PY : BASIC SQL COMMANDS TUTORIAL"
  7. print
  8. print "This module is designed for being imported from python prompt"
  9. print
  10. print "In order to run the samples included here, first create a connection"
  11. print "using :                        cnx = basics.DB(...)"
  12. print "then start the demo with:      basics.demo(cnx)"
  13. print "__________________________________________________________________"
  14. from pg import DB
  15. from pgtools import *
  16. # table creation commands
  17. def create_table(pgcnx):
  18. print "-----------------------------"
  19. print "-- Creating a table:"
  20. print "-- a CREATE TABLE is used to create base tables. POSTGRES"
  21. print "-- SQL has its own set of built-in types. (Note that"
  22. print "-- keywords are case-insensitive but identifiers are "
  23. print "-- case-sensitive.)"
  24. print "-----------------------------"
  25. print
  26. print "Sending query :"
  27. print "CREATE TABLE weather ("
  28.         print "    city            varchar(80),"
  29.         print "    temp_lo         int,"
  30.         print "    temp_hi         int,"
  31.         print "    prcp            float8,"
  32.         print "    date            date"
  33.         print ")"
  34.         pgcnx.query("CREATE TABLE weather (city varchar(80), temp_lo int," 
  35. "temp_hi int, prcp float8, date date)")
  36. print
  37. print "Sending query :"
  38. print "CREATE TABLE cities ("
  39. print "    name varchar(80),"
  40. print "    location point"
  41. print ")"
  42. pgcnx.query("CREATE TABLE cities ("
  43. "name varchar(80),"
  44. "location point)")
  45. # data insertion commands
  46. def insert_data(pgcnx):
  47. print "-----------------------------"
  48. print "-- Inserting data:"
  49. print "-- an INSERT statement is used to insert a new row into"
  50. print "--       a table. There are several ways you can specify what"
  51. print "--  columns the data should go to."
  52. print "-----------------------------"
  53. print
  54. print "-- 1. the simplest case is when the list of value correspond to"
  55. print "--    the order of the columns specified in CREATE TABLE."
  56. print
  57. print "Sending query :"
  58. print "INSERT INTO weather "
  59. print "   VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994')"
  60. pgcnx.query("INSERT INTO weather "
  61. "VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994')")
  62. print
  63. print "Sending query :"
  64. print "INSERT INTO cities "
  65. print "   VALUES ('San Francisco', '(-194.0, 53.0)')"
  66. pgcnx.query("INSERT INTO cities "
  67. "VALUES ('San Francisco', '(-194.0, 53.0)')")
  68. print
  69. wait_key()
  70. print "-- 2. you can also specify what column the values correspond "
  71. print "     to. (The columns can be specified in any order. You may "
  72. print "     also omit any number of columns. eg. unknown precipitation"
  73. print "     below)"
  74. print "Sending query :"
  75. print "INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)"
  76. print "   VALUES ('San Francisco', 43, 57, 0.0, '11/29/1994')"
  77. pgcnx.query("INSERT INTO weather (date, city, temp_hi, temp_lo)" 
  78. "VALUES ('11/29/1994', 'Hayward', 54, 37)")
  79. # direct selection commands
  80. def select_data1(pgcnx):
  81. print "-----------------------------"
  82. print "-- Retrieving data:"
  83. print "-- a SELECT statement is used for retrieving data. The "
  84. print "-- basic syntax is:"
  85. print "-- SELECT columns FROM tables WHERE predicates"
  86. print "-----------------------------"
  87. print
  88. print "-- a simple one would be the query:"
  89. print "SELECT * FROM weather"
  90. print 
  91. print "The result is :"
  92. q = pgcnx.query("SELECT * FROM weather")
  93. print q
  94. print
  95. print "-- you may also specify expressions in the target list (the "
  96. print "-- 'AS column' specifies the column name of the result. It is "
  97. print "-- optional.)"
  98. print "The query :"
  99. print "   SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date "
  100. print "   FROM weather"
  101. print "Gives :"
  102. print pgcnx.query("SELECT city, (temp_hi+temp_lo)/2 "
  103. "AS temp_avg, date FROM weather")
  104. print
  105. print "-- if you want to retrieve rows that satisfy certain condition"
  106. print "-- (ie. a restriction), specify the condition in WHERE. The "
  107. print "-- following retrieves the weather of San Francisco on rainy "
  108. print "-- days."
  109. print "SELECT *"
  110. print "FROM weather"
  111. print "WHERE city = 'San Francisco' "
  112. print "  and prcp > 0.0"
  113. print pgcnx.query("SELECT * FROM weather WHERE city = 'San Francisco'" 
  114. " AND prcp > 0.0")
  115. print
  116. print "-- here is a more complicated one. Duplicates are removed when "
  117. print "-- DISTINCT is specified. ORDER BY specifies the column to sort"
  118. print "-- on. (Just to make sure the following won't confuse you, "
  119. print "-- DISTINCT and ORDER BY can be used separately.)"
  120. print "SELECT DISTINCT city"
  121. print "FROM weather"
  122. print "ORDER BY city;"
  123. print pgcnx.query("SELECT DISTINCT city FROM weather ORDER BY city")
  124. # selection to a temporary table
  125. def select_data2(pgcnx):
  126. print "-----------------------------"
  127. print "-- Retrieving data into other classes:"
  128. print "-- a SELECT ... INTO statement can be used to retrieve "
  129. print "-- data into another class."
  130. print "-----------------------------"
  131. print 
  132. print "The query :"
  133. print "SELECT * INTO TABLE temp "
  134. print "FROM weather"
  135. print "WHERE city = 'San Francisco' "
  136. print "  and prcp > 0.0"
  137. pgcnx.query("SELECT * INTO TABLE temp FROM weather " 
  138. "WHERE city = 'San Francisco' and prcp > 0.0")
  139. print "Fills the table temp, that can be listed with :"
  140. print "SELECT * from temp"
  141. print pgcnx.query("SELECT * from temp")
  142. # aggregate creation commands
  143. def create_aggregate(pgcnx):
  144. print "-----------------------------"
  145. print "-- Aggregates"
  146. print "-----------------------------"
  147. print
  148. print "Let's consider the query :"
  149. print "SELECT max(temp_lo)"
  150. print "FROM weather;"
  151. print pgcnx.query("SELECT max(temp_lo) FROM weather")
  152. print 
  153. print "-- Aggregate with GROUP BY"
  154. print "SELECT city, max(temp_lo)"
  155. print "FROM weather "
  156. print "GROUP BY city;"
  157. print pgcnx.query( "SELECT city, max(temp_lo)"
  158. "FROM weather GROUP BY city")
  159. # table join commands
  160. def join_table(pgcnx):
  161. print "-----------------------------"
  162. print "-- Joining tables:"
  163. print "-- queries can access multiple tables at once or access"
  164. print "--  the same table in such a way that multiple instances"
  165. print "-- of the table are being processed at the same time."
  166. print "-----------------------------"
  167. print
  168. print "-- suppose we want to find all the records that are in the "
  169. print "-- temperature range of other records. W1 and W2 are aliases "
  170. print "--for weather."
  171. print
  172. print "SELECT W1.city, W1.temp_lo, W1.temp_hi, "
  173. print "    W2.city, W2.temp_lo, W2.temp_hi"
  174. print "FROM weather W1, weather W2"
  175. print "WHERE W1.temp_lo < W2.temp_lo "
  176. print "  and W1.temp_hi > W2.temp_hi"
  177. print
  178. print pgcnx.query("SELECT W1.city, W1.temp_lo, W1.temp_hi, " 
  179. "W2.city, W2.temp_lo, W2.temp_hi FROM weather W1, weather W2 "
  180. "WHERE W1.temp_lo < W2.temp_lo and W1.temp_hi > W2.temp_hi")
  181. print
  182. print "-- let's join two tables. The following joins the weather table"
  183. print "-- and the cities table."
  184. print
  185. print "SELECT city, location, prcp, date"
  186. print "FROM weather, cities"
  187. print "WHERE name = city"
  188. print
  189. print pgcnx.query("SELECT city, location, prcp, date FROM weather, cities"
  190. " WHERE name = city")
  191. print
  192. print "-- since the column names are all different, we don't have to "
  193. print "-- specify the table name. If you want to be clear, you can do "
  194. print "-- the following. They give identical results, of course."
  195. print
  196. print "SELECT w.city, c.location, w.prcp, w.date"
  197. print "FROM weather w, cities c"
  198. print "WHERE c.name = w.city;"
  199. print
  200. print pgcnx.query("SELECT w.city, c.location, w.prcp, w.date " 
  201. "FROM weather w, cities c WHERE c.name = w.city")
  202. # data updating commands
  203. def update_data(pgcnx):
  204. print "-----------------------------"
  205. print "-- Updating data:"
  206. print "-- an UPDATE statement is used for updating data. "
  207. print "-----------------------------"
  208. print 
  209. print "-- suppose you discover the temperature readings are all off by"
  210. print "-- 2 degrees as of Nov 28, you may update the data as follow:"
  211. print
  212. print "UPDATE weather"
  213. print "  SET temp_hi = temp_hi - 2,  temp_lo = temp_lo - 2"
  214. print "  WHERE date > '11/28/1994'"
  215. print
  216. pgcnx.query("UPDATE weather "
  217. "SET temp_hi = temp_hi - 2,  temp_lo = temp_lo - 2" 
  218. "WHERE date > '11/28/1994'")
  219. print
  220. print "SELECT * from weather"
  221. print pgcnx.query("SELECT * from weather")
  222. # data deletion commands
  223. def delete_data(pgcnx):
  224. print "-----------------------------"
  225. print "-- Deleting data:"
  226. print "-- a DELETE statement is used for deleting rows from a "
  227. print "-- table."
  228. print "-----------------------------"
  229. print
  230. print "-- suppose you are no longer interested in the weather of "
  231. print "-- Hayward, you can do the following to delete those rows from"
  232. print "-- the table"
  233. print
  234. print "DELETE FROM weather WHERE city = 'Hayward'"
  235. pgcnx.query("DELETE FROM weather WHERE city = 'Hayward'")
  236. print
  237. print "SELECT * from weather"
  238. print
  239. print pgcnx.query("SELECT * from weather")
  240. print
  241. print "-- you can also delete all the rows in a table by doing the "
  242. print "-- following. (This is different from DROP TABLE which removes "
  243. print "-- the table in addition to the removing the rows.)"
  244. print
  245. print "DELETE FROM weather"
  246. pgcnx.query("DELETE FROM weather")
  247. print
  248. print "SELECT * from weather"
  249. print pgcnx.query("SELECT * from weather")
  250. # table removal commands
  251. def remove_table(pgcnx):
  252. print "-----------------------------"
  253. print "-- Removing the tables:"
  254. print "-- DROP TABLE is used to remove tables. After you have"
  255. print "-- done this, you can no longer use those tables."
  256. print "-----------------------------"
  257. print
  258. print "DROP TABLE weather, cities, temp"
  259. pgcnx.query("DROP TABLE weather, cities, temp")
  260. # main demo function
  261. def demo(pgcnx):
  262. create_table(pgcnx)
  263. wait_key()
  264. insert_data(pgcnx)
  265. wait_key()
  266. select_data1(pgcnx)
  267. select_data2(pgcnx)
  268. create_aggregate(pgcnx)
  269. join_table(pgcnx)
  270. update_data(pgcnx)
  271. delete_data(pgcnx)
  272. remove_table(pgcnx)