SQL-relationer

Introduktion till databaser i Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Relationer

  • Hjälper oss att undvika duplicerad data
  • Gör det enkelt att ändra saker på ett ställe
  • Praktiskt för att bryta ut information från en tabell vi sällan behöver
Introduktion till databaser i Python

Relationer

Introduktion till databaser i Python

Automatiska join-operationer

stmt = select([census.columns.pop2008, 
        state_fact.columns.abbreviation])

results = connection.execute(stmt).fetchall() print(results)
[(95012, u'IL'),
 (95012, u'NJ'),
 (95012, u'ND'),
 (95012, u'OR'),
 (95012, u'DC'),
 (95012, u'WI'),
 ...
Introduktion till databaser i Python

Join

  • Tar emot en tabell och ett valfritt uttryck som beskriver hur de två tabellerna är relaterade
  • Uttrycket behövs inte om relationen är fördefinierad och tillgänglig via reflektion
  • Placeras direkt efter select()-satsen och före eventuella where()-, order_by()- eller group_by()-satser
Introduktion till databaser i Python

select_from()

  • Används för att ersätta den automatiskt genererade FROM-satsen med en join
  • Omsluter join()-satsen
Introduktion till databaser i Python

Exempel på select_from()

stmt = select([func.sum(census.columns.pop2000)])

stmt = stmt.select_from(census.join(state_fact))
stmt = stmt.where(state_fact.columns.circuit_court == '10')
result = connection.execute(stmt).scalar() print(result)
14945252
Introduktion till databaser i Python

Join utan fördefinierad relation

  • Join tar emot en tabell och ett valfritt uttryck som beskriver hur de två tabellerna är relaterade
  • Kopplar bara samman data som matchar mellan de två kolumnerna
  • Undvik att joina kolumner av olika datatyper
Introduktion till databaser i Python

Exempel på select_from()

stmt = select([func.sum(census.columns.pop2000)])

stmt = stmt.select_from( census.join(state_fact, census.columns.state == state_fact.columns.name))
stmt = stmt.where( state_fact.columns.census_division_name == 'East South Central')
result = connection.execute(stmt).scalar() print(result)
16982311
Introduktion till databaser i Python

Nu kör vi en övning!

Introduktion till databaser i Python

Preparing Video For Download...