Relational Databases: Object Relational Mappers – SQLObject II

Slides:



Advertisements
Similar presentations
Relational Databases: Object Relational Mappers - SQLObject BCHB Lecture 22 11/14/2014BCHB Edwards.
Advertisements

Web-Applications: TurboGears II BCHB Lecture 26 12/03/2014BCHB Edwards.
Relational Databases: Object Relational Mappers – SQLObject II BCHB Lecture 23 11/20/2013BCHB Edwards.
Relational Databases: Basic Concepts BCHB Lecture 21 11/12/2014BCHB Edwards.
1 Database Concepts 2 Definition of a Database An organized Collection Of related records.
ACCESS CHAPTER 4 Tables and Queries Learning Objectives: Define table structure Enter data into a table Alter table structure Set a table’s field properties.
DataBase Management System What is DBMS Purpose of DBMS Data Abstraction Data Definition Language Data Manipulation Language Data Models Data Keys Relationships.
9/23/2015BCHB Edwards Advanced Python Data Structures BCHB Lecture 7.
9/28/2015BCHB Edwards Basic Python Review BCHB Lecture 8.
DAY 21: MICROSOFT ACCESS – CHAPTER 5 MICROSOFT ACCESS – CHAPTER 6 MICROSOFT ACCESS – CHAPTER 7 Aliya Farheen October 29,2015.
11/4/2015BCHB Edwards Advanced Python Concepts: Object Oriented Programming BCHB Lecture 17.
Relational Databases: Basic Concepts BCHB Lecture 21 By Edwards & Li Slides:
Web-Applications: TurboGears II BCHB Lecture 26 12/7/2015BCHB Edwards.
Web-Applications: TurboGears BCHB Lecture 25 12/02/2015BCHB Edwards.
DAY 18: MICROSOFT ACCESS – CHAPTER 3 CONTD. Akhila Kondai October 21, 2013.
LISTS and TUPLES. Topics Sequences Introduction to Lists List Slicing Finding Items in Lists with the in Operator List Methods and Useful Built-in Functions.
Howard Paul. Sequential Access Index Files and Data File Random Access.
Build a database II: Create tables for a new Access database Create your tables In a relational database, tables store your data. Your data doesn’t “live”
Database Management System
Sequence File Parsing using Biopython
Relational Databases: Basic Concepts
Tables & Relationships
Web-Applications: TurboGears
Advanced Python Concepts: Modules
Relational Databases: Object Relational Mappers - SQLObject
© 2016, Mike Murach & Associates, Inc.
Advanced Python Data Structures
Web-Applications: TurboGears II
Python Modules and Basic File Parsing
Python Modules and Basic File Parsing
Advanced Python Data Structures
CSCI-100 Introduction to Computing
Advanced Python Concepts: Object Oriented Programming
Advanced Python Concepts: OOP & Inheritance
Sequence File Parsing using Biopython
Databases and Information Management
CTFS Asia Region Workshop 2014
INFO/CSE 100, Spring 2005 Fluency in Information Technology
Database.
Basic Python Review BCHB524 Lecture 8 BCHB524 - Edwards.
Advanced Python Concepts: OOP & Inheritance
Relational Databases: Object Relational Mappers – SQLObject II
Databases and Information Management
Nagendra Vemulapalli Access chapters 3&5 Nagendra Vemulapalli 1/18/2019.
Lecture 2 Database & SQL Continued
Getting to First Base: Introduction to Database Concepts
Advanced Database Concepts: Reports & Views
Advanced Python Concepts: Exceptions
Web-Applications: TurboGears II
Introduction To ACCESS DataBase
Advanced Python Data Structures
Advanced Python Concepts: Modules
Logical Data Modeling – Normalization
Advanced Python Concepts: OOP & Inheritance
Relational Databases: Basic Concepts
Relational Databases: Object Relational Mappers - SQLObject
Relational Databases: Basic Concepts
Web-Applications: TurboGears II
Basic Python Review BCHB524 Lecture 8 BCHB524 - Edwards.
Getting to First Base: Introduction to Database Concepts
Advanced Python Concepts: Exceptions
Relational Databases: Object Relational Mappers – SQLObject II
Advanced Python Concepts: Modules
Python Modules and Basic File Parsing
Relational Databases: Object Relational Mappers - SQLObject
Getting to First Base: Introduction to Database Concepts
Advanced Python Concepts: Object Oriented Programming
Database Assignment Write down your answers in word document with file name highlighting your name, student number, and class. E.g “95002”+”_”+ “03 class”+”_”+”name”,
Sequence File Parsing using Biopython
Microsoft Access Date.
Presentation transcript:

Relational Databases: Object Relational Mappers – SQLObject II BCHB524 Lecture 23 BCHB524 - Edwards

Relational Databases Store information in a table Rows represent items Columns represent items' properties or attributes Name Continent Region Surface Area Population GNP Brazil South America 8547403 170115000 776739 Indonesia Asia Southeast Asia 1904569 212107000 84982 India Southern and Central Asia 3287263 1013662000 447114 China Eastern Asia 9572900 1277558000 982268 Pakistan 796095 156483000 61289 United States North America 9363520 278357000 8510700 BCHB524 - Edwards

... as Objects Objects have data members or attributes. Store objects in a list or iterable. Abstract away details of underlying RDBMS c1 = Country() c1.name = 'Brazil' c1.continent = 'South America' c1.region = 'South America' c1.surfaceArea = 8547403 c1.population = 170115000 c1.gnp = 776739 # initialize c2, ..., c6 countryTable = [ c1, c2, c3, c4, c5, c6 ] for cnty in countryTable:     if cnty.population > 100000000:         print cnty.name, cnty.population BCHB524 - Edwards

Taxonomy Database, from scratch Specify the model Tables: Taxonomy and Name Populate basic data-values in the Taxonomy table from “small_nodes.dmp” Populate the Names table from “small_names.dmp” Insert basic data-values Insert relationship with Taxonomy table Fix Taxonomy parent relationship Fix Taxonomy derived information Use in a program… BCHB524 - Edwards

Taxonomy Database: model.py from sqlobject import * import os.path, sys dbfile = 'small_taxa.db3' def init(new=False):     # Magic formatting for database URI     conn_str = os.path.abspath(dbfile)     conn_str = 'sqlite:'+ conn_str     # Connect to database     sqlhub.processConnection = connectionForURI(conn_str)     if new:         # Create new tables (remove old ones if they exist)         Taxonomy.dropTable(ifExists=True)         Name.dropTable(ifExists=True)         Taxonomy.createTable()         Name.createTable() BCHB524 - Edwards

Taxonomy Database: model.py # model.py continued… class Taxonomy(SQLObject):     taxid = IntCol(alternateID=True)     scientific_name = StringCol()     rank = StringCol()     parent = ForeignKey("Taxonomy") class Name(SQLObject):     taxonomy = ForeignKey("Taxonomy")     name = StringCol()     name_class = StringCol() BCHB524 - Edwards

Taxonomy Database structure Name Taxonomy 1 2 3 4 5 6 1 2 3 4 5 parent taxonomy taxonomy: 4 parent: 2 taxonomy: 4 parent: 2 taxonomy: 4 Foreign Key: id number of some other row BCHB524 - Edwards

Populate Taxonomy table: load_taxa.py import sys from model import * init(new=True) # Read in the taxonomy nodes, populate taxid and rank h = open(sys.argv[1]) for l in h:     l = l.strip('\t|\n')             sl = l.split('\t|\t')     taxid = int(sl[0])     rank = sl[2]     t = Taxonomy(taxid=taxid, rank=rank,                  scientific_name=None,                  parent=None) h.close() import sys from model import * init(new=True) # Read in the taxonomy nodes, populate taxid and rank h = open(sys.argv[1]) for l in h: l = l.strip('\t|\n') sl = l.split('\t|\t') taxid = int(sl[0]) rank = sl[2] t = Taxonomy(taxid=taxid, rank=rank, scientific_name=None, parent=None) h.close() BCHB524 - Edwards

Populate Name table: load_names.py import sys from model import * init() # Read in the names, populate name, class, and id of  # taxonomy row h = open(sys.argv[1]) for l in h:     l = l.strip('\t|\n')             sl = l.split('\t|\t')     taxid = int(sl[0])     name_class = sl[3]     name = sl[1]     t = Taxonomy.byTaxid(taxid)     n = Name(name=name, name_class=name_class, taxonomy=t) h.close() import sys from model import * init() # Read in the names, populate name, class, and id of taxonomy row h = open(sys.argv[1]) for l in h: l = l.strip('\t|\n') sl = l.split('\t|\t') taxid = int(sl[0]) name_class = sl[3] name = sl[1] t = Taxonomy.byTaxid(taxid) n = Name(name=name, name_class=name_class, taxonomy=t) h.close() BCHB524 - Edwards

Fix up the Taxonomy table: fix_taxa.py import sys from model import * init() # Read in the taxonomy nodes, get self and parent taxonomy objects, # and fix the parent field appropriately h = open(sys.argv[1]) for l in h:     l = l.strip('\t|\n')             sl = l.split('\t|\t')     taxid = int(sl[0])     parent_taxid = int(sl[1])     t = Taxonomy.byTaxid(taxid)     p = Taxonomy.byTaxid(parent_taxid)     t.parent = p h.close() # Find all scientific names and fix their taxonomy objects' scientific # name files appropriately for n in Name.select(Name.q.name_class == 'scientific name'):     n.taxonomy.scientific_name = n.name import sys from model import * init() # Read in the taxonomy nodes, get self and parent taxonomy objects, # and fix the parent field appropriately h = open(sys.argv[1]) for l in h: l = l.strip('\t|\n') sl = l.split('\t|\t') taxid = int(sl[0]) parent_taxid = int(sl[1]) t = Taxonomy.byTaxid(taxid) p = Taxonomy.byTaxid(parent_taxid) t.parent = p h.close() # Find all scientific names and fix their taxonomy objects' scientific # name files appropriately for n in Name.select(Name.q.name_class == 'scientific name'): n.taxonomy.scientific_name = n.name BCHB524 - Edwards

Back to the Taxonomy example Each taxonomy entry can have multiple names Many names can point (ForeignKey) to a single taxonomy entry name → taxonomy is easy... taxonomy → list of names requires a select statement from model import * init() hs = Taxonomy.byTaxid(9606) for n in Name.select(Name.q.taxonomy==hs):      print n.name BCHB524 - Edwards

Taxonomy Database structure Name Taxonomy 1 2 3 4 5 6 1 2 3 4 5 parent taxonomy taxonomy: 4 parent: 2 taxonomy: 4 parent: 2 taxonomy: 4 Foreign Key: id number of some other row BCHB524 - Edwards

Taxonomy table relationships This relationship (one-to-many) is called a multiple join. Related joins (many-to-many) too... class Taxonomy(SQLObject):     # other data members     names = MultipleJoin("Name")     children = MultipleJoin("Taxonomy",joinColumn='parent_id') from model import * init() hs = Taxonomy.byTaxid(9606) for n in hs.names:      print n.name for c in hs.children:      print c.scientific_name BCHB524 - Edwards

SQLObject Exceptions What happens when the row isn't in the table? from model import * try:    hs = Taxonomy.get(7921)    hs = Taxonomy.byTaxid(9606) except SQLObjectNotFound:    # if row id 7921 / Tax id 9606 is not in table... results = Taxonomy.selectBy(taxid=9606) if results.count() == 0:    # No rows satisfy the constraint!     try:    first_item = results[0] except IndexError:    # No first item in the results BCHB524 - Edwards

Example Program import sys from model import * init() try:     taxid = int(sys.argv[1]) except IndexError:     print >>sys.stderr, "Need a taxonomy id argument"     sys.exit(1) except ValueError:     print >>sys.stderr, "Taxonomy id should be an intenger"     sys.exit(1)      #Get taxonomy row try:     t = Taxonomy.byTaxid(taxid) except SQLObjectNotFound:     print >>sys.stderr, "Taxonomy id",taxid,"does not exist"     sys.exit(1) for n in t.names:     print "Organism",t.scientific_name,"has name",n.name for c in t.children:     print "Organism",t.scientific_name,"has child",c.scientific_name,c.taxid print "Organism",t.scientific_name,"has parent",t.parent.scientific_name,t.parent.taxid BCHB524 - Edwards

Example Program # Continued... # Iterate up through the taxonomy tree from t, to find its genus r = t g = None while r != r.parent:     if r.rank == 'genus':         g = r         break     r = r.parent if g == None:     print "Organism",t.scientific_name,"has no genus" else:     print "Organism",t.scientific_name,"has genus",g.scientific_name BCHB524 - Edwards

Exercises Write a python program using SQLObject to find the taxonomic lineage of a user-supplied organism name. Make sure you use the small_taxa.db3 file from the course data-folder Note that the supplied model.py files from Lectures 22 and 23 are different! Lecture 22 uses taxa.db3, Lecture 23 uses small_taxa.db3 BCHB524 - Edwards

Homework 12 Due Monday, November 26th. Exercise from Lecture 22 BCHB524 - Edwards