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

数据库系统

开发平台:

Unix_Linux

  1. #! /usr/local/bin/python
  2. # advanced.py - demo of advanced features of PostGres. Some may not be ANSI.
  3. # inspired from the Postgres tutorial 
  4. # adapted to Python 1995 by Pascal Andre
  5. print "__________________________________________________________________"
  6. print "MODULE ADVANCED.PY : ADVANCED POSTGRES 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 = advanced.DB(...)"
  12. print "then start the demo with:      advanced.demo(cnx)"
  13. print "__________________________________________________________________"
  14. from pgtools import *
  15. from pg import DB
  16. # inheritance features
  17. def inherit_demo(pgcnx):
  18. print "-----------------------------"
  19. print "-- Inheritance:"
  20. print "-- a table can inherit from zero or more tables. A query"
  21. print "-- can reference either all rows of a table or all rows "
  22. print "-- of a table plus all of its descendants."
  23. print "-----------------------------"
  24. print
  25. print "-- For example, the capitals table inherits from cities table."
  26. print "-- (It inherits  all data fields from cities.)"
  27. print
  28. print "CREATE TABLE cities ("
  29. print "    name text,"
  30. print "    population float8,"
  31. print "    altitude int"
  32. print ")"
  33. print
  34. print "CREATE TABLE capitals ("
  35. print "    state varchar(2)"
  36. print ") INHERITS (cities)"
  37. pgcnx.query("CREATE TABLE cities ("
  38. "name text,"
  39. "population float8,"
  40. "altitude int)")
  41. pgcnx.query("CREATE TABLE capitals ("
  42. "state varchar(2)) INHERITS (cities)")
  43. wait_key()
  44. print
  45. print "-- now, let's populate the tables"
  46. print
  47. print "INSERT INTO cities VALUES ('San Francisco', 7.24E+5, 63)"
  48. print "INSERT INTO cities VALUES ('Las Vegas', 2.583E+5, 2174)"
  49. print "INSERT INTO cities VALUES ('Mariposa', 1200, 1953)"
  50. print
  51. print "INSERT INTO capitals VALUES ('Sacramento', 3.694E+5, 30, 'CA')"
  52. print "INSERT INTO capitals VALUES ('Madison', 1.913E+5, 845, 'WI')"
  53. print
  54. pgcnx.query(
  55. "INSERT INTO cities VALUES ('San Francisco', 7.24E+5, 63)")
  56. pgcnx.query(
  57. "INSERT INTO cities VALUES ('Las Vegas', 2.583E+5, 2174)")
  58. pgcnx.query(
  59. "INSERT INTO cities VALUES ('Mariposa', 1200, 1953)")
  60. pgcnx.query("INSERT INTO capitals"
  61. " VALUES ('Sacramento', 3.694E+5, 30, 'CA')")
  62. pgcnx.query("INSERT INTO capitals"
  63. " VALUES ('Madison', 1.913E+5, 845, 'WI')")
  64. print
  65. print "SELECT * FROM cities"
  66. print pgcnx.query("SELECT * FROM cities")
  67. print "SELECT * FROM capitals"
  68. print pgcnx.query("SELECT * FROM capitals")
  69. print
  70. print "-- like before, a regular query references rows of the base"
  71. print "-- table only"
  72. print
  73. print "SELECT name, altitude"
  74. print "FROM cities"
  75. print "WHERE altitude > 500;"
  76. print pgcnx.query("SELECT name, altitude "
  77. "FROM cities "
  78. "WHERE altitude > 500")
  79. print
  80. print "-- on the other hand, you can find all cities, including "
  81. print "-- capitals, that are located at an altitude of 500 'ft "
  82. print "-- or higher by:"
  83. print
  84. print "SELECT c.name, c.altitude"
  85. print "FROM cities* c"
  86. print "WHERE c.altitude > 500"
  87. print pgcnx.query("SELECT c.name, c.altitude "
  88. "FROM cities* c "
  89. "WHERE c.altitude > 500")
  90. # arrays attributes 
  91. def array_demo(pgcnx):
  92. print "----------------------"
  93. print "-- Arrays:"
  94. print "--      attributes can be arrays of base types or user-defined "
  95. print "--      types"
  96. print "----------------------"
  97. print
  98. print "CREATE TABLE sal_emp ("
  99. print "    name text,"
  100. print "    pay_by_quarter int4[],"
  101. print "    schedule text[][]"
  102. print ")"
  103. pgcnx.query("CREATE TABLE sal_emp ("
  104. "name text,"
  105. "pay_by_quarter int4[],"
  106. "schedule text[][])")
  107. wait_key()
  108. print
  109. print "-- insert instances with array attributes.  "
  110. print "   Note the use of braces"
  111. print
  112. print "INSERT INTO sal_emp VALUES ("
  113. print "    'Bill',"
  114. print "    '{10000,10000,10000,10000}',"
  115. print "    '{{"meeting", "lunch"}, {}}')"
  116. print
  117. print "INSERT INTO sal_emp VALUES ("
  118. print "    'Carol',"
  119. print "    '{20000,25000,25000,25000}',"
  120. print "    '{{"talk", "consult"}, {"meeting"}}')"
  121. print
  122. pgcnx.query("INSERT INTO sal_emp VALUES ("
  123. "'Bill', '{10000,10000,10000,10000}',"
  124. "'{{"meeting", "lunch"}, {}}')")
  125. pgcnx.query("INSERT INTO sal_emp VALUES ("
  126. "'Carol', '{20000,25000,25000,25000}',"
  127. "'{{"talk", "consult"}, {"meeting"}}')")
  128. wait_key()
  129. print
  130. print "----------------------"
  131. print "-- queries on array attributes"
  132. print "----------------------"
  133. print
  134. print "SELECT name FROM sal_emp WHERE"
  135. print "  sal_emp.pay_by_quarter[1] <> sal_emp.pay_by_quarter[2]"
  136. print
  137. print pgcnx.query("SELECT name FROM sal_emp WHERE "
  138. "sal_emp.pay_by_quarter[1] <> sal_emp.pay_by_quarter[2]")
  139. print
  140. print "-- retrieve third quarter pay of all employees"
  141. print 
  142. print "SELECT sal_emp.pay_by_quarter[3] FROM sal_emp"
  143. print
  144. print pgcnx.query("SELECT sal_emp.pay_by_quarter[3] FROM sal_emp")
  145. print
  146. print "-- select subarrays"
  147. print 
  148. print "SELECT sal_emp.schedule[1:2][1:1] FROM sal_emp WHERE "
  149. print "     sal_emp.name = 'Bill'"
  150. print pgcnx.query("SELECT sal_emp.schedule[1:2][1:1] FROM sal_emp WHERE " 
  151. "sal_emp.name = 'Bill'")
  152. # base cleanup
  153. def demo_cleanup(pgcnx):
  154. print "-- clean up (you must remove the children first)"
  155. print "DROP TABLE sal_emp"
  156. print "DROP TABLE capitals"
  157. print "DROP TABLE cities;"
  158. pgcnx.query("DROP TABLE sal_emp")
  159. pgcnx.query("DROP TABLE capitals")
  160. pgcnx.query("DROP TABLE cities")
  161. # main demo function
  162. def demo(pgcnx):
  163. inherit_demo(pgcnx)
  164. array_demo(pgcnx)
  165. demo_cleanup(pgcnx)