arthi.kasturirangan@informa.com
Initial Push
560d5c2
from sqlalchemy import (
Boolean,
Column,
DateTime,
ForeignKey,
Integer,
Numeric,
SmallInteger,
String,
Text,
)
from sqlalchemy.orm import relationship
from .database import Base
class Actor(Base):
__tablename__ = "actor"
actor_id = Column(Integer, primary_key=True)
first_name = Column(String(45), nullable=False)
last_name = Column(String(45), nullable=False)
last_update = Column(DateTime, nullable=False)
films = relationship("Film", secondary="film_actor", back_populates="actors")
class Category(Base):
__tablename__ = "category"
category_id = Column(SmallInteger, primary_key=True)
name = Column(String(25), nullable=False)
last_update = Column(DateTime, nullable=False)
films = relationship("Film", secondary="film_category", back_populates="categories")
class Film(Base):
__tablename__ = "film"
film_id = Column(Integer, primary_key=True)
title = Column(String(255), nullable=False)
description = Column(Text)
release_year = Column(String(4))
language_id = Column(SmallInteger, ForeignKey("language.language_id"), nullable=False)
original_language_id = Column(SmallInteger, ForeignKey("language.language_id"))
rental_duration = Column(SmallInteger, nullable=False, default=3)
rental_rate = Column(Numeric(4, 2), nullable=False, default=4.99)
length = Column(SmallInteger)
replacement_cost = Column(Numeric(5, 2), nullable=False, default=19.99)
rating = Column(String(10), default="G")
special_features = Column(String(100))
last_update = Column(DateTime, nullable=False)
language = relationship("Language", foreign_keys=[language_id])
original_language = relationship("Language", foreign_keys=[original_language_id])
inventory = relationship("Inventory", back_populates="film")
actors = relationship("Actor", secondary="film_actor", back_populates="films")
categories = relationship("Category", secondary="film_category", back_populates="films")
class Customer(Base):
__tablename__ = "customer"
customer_id = Column(Integer, primary_key=True)
store_id = Column(Integer, ForeignKey("store.store_id"), nullable=False)
first_name = Column(String(45), nullable=False)
last_name = Column(String(45), nullable=False)
email = Column(String(50))
address_id = Column(Integer, ForeignKey("address.address_id"), nullable=False)
active = Column(Boolean, nullable=False, default=True)
create_date = Column(DateTime, nullable=False)
last_update = Column(DateTime, nullable=False)
store = relationship("Store", back_populates="customers")
address = relationship("Address", back_populates="customers")
rentals = relationship("Rental", back_populates="customer")
payments = relationship("Payment", back_populates="customer")
class Store(Base):
__tablename__ = "store"
store_id = Column(Integer, primary_key=True)
manager_staff_id = Column(SmallInteger, ForeignKey("staff.staff_id"), nullable=False)
address_id = Column(Integer, ForeignKey("address.address_id"), nullable=False)
last_update = Column(DateTime, nullable=False)
address = relationship("Address", back_populates="stores")
manager = relationship("Staff", foreign_keys=[manager_staff_id])
inventory = relationship("Inventory", back_populates="store")
customers = relationship("Customer", back_populates="store")
class Rental(Base):
__tablename__ = "rental"
rental_id = Column(Integer, primary_key=True)
rental_date = Column(DateTime, nullable=False)
inventory_id = Column(Integer, ForeignKey("inventory.inventory_id"), nullable=False)
customer_id = Column(Integer, ForeignKey("customer.customer_id"), nullable=False)
return_date = Column(DateTime)
staff_id = Column(SmallInteger, ForeignKey("staff.staff_id"), nullable=False)
last_update = Column(DateTime, nullable=False)
inventory = relationship("Inventory", back_populates="rentals")
customer = relationship("Customer", back_populates="rentals")
staff = relationship("Staff", back_populates="rentals")
payments = relationship("Payment", back_populates="rental")
class Payment(Base):
__tablename__ = "payment"
payment_id = Column(Integer, primary_key=True)
customer_id = Column(Integer, ForeignKey("customer.customer_id"), nullable=False)
staff_id = Column(SmallInteger, ForeignKey("staff.staff_id"), nullable=False)
rental_id = Column(Integer, ForeignKey("rental.rental_id"))
amount = Column(Numeric(5, 2), nullable=False)
payment_date = Column(DateTime, nullable=False)
last_update = Column(DateTime, nullable=False)
customer = relationship("Customer", back_populates="payments")
staff = relationship("Staff", back_populates="payments")
rental = relationship("Rental", back_populates="payments")
class Country(Base):
__tablename__ = "country"
country_id = Column(SmallInteger, primary_key=True)
country = Column(String(50), nullable=False)
last_update = Column(DateTime)
cities = relationship("City", back_populates="country")
class City(Base):
__tablename__ = "city"
city_id = Column(Integer, primary_key=True)
city = Column(String(50), nullable=False)
country_id = Column(SmallInteger, ForeignKey("country.country_id"), nullable=False)
last_update = Column(DateTime, nullable=False)
country = relationship("Country", back_populates="cities")
addresses = relationship("Address", back_populates="city")
class Address(Base):
__tablename__ = "address"
address_id = Column(Integer, primary_key=True)
address = Column(String(50), nullable=False)
address2 = Column(String(50))
district = Column(String(20), nullable=False)
city_id = Column(Integer, ForeignKey("city.city_id"), nullable=False)
postal_code = Column(String(10))
phone = Column(String(20), nullable=False)
last_update = Column(DateTime, nullable=False)
city = relationship("City", back_populates="addresses")
stores = relationship("Store", back_populates="address")
customers = relationship("Customer", back_populates="address")
staff = relationship("Staff", back_populates="address")
class Staff(Base):
__tablename__ = "staff"
staff_id = Column(SmallInteger, primary_key=True)
first_name = Column(String(45), nullable=False)
last_name = Column(String(45), nullable=False)
address_id = Column(Integer, ForeignKey("address.address_id"), nullable=False)
picture = Column(Text)
email = Column(String(50))
store_id = Column(Integer, ForeignKey("store.store_id"), nullable=False)
active = Column(SmallInteger, nullable=False, default=1)
username = Column(String(16), nullable=False)
password = Column(String(40))
last_update = Column(DateTime, nullable=False)
address = relationship("Address", back_populates="staff")
store = relationship("Store", foreign_keys=[store_id])
rentals = relationship("Rental", back_populates="staff")
payments = relationship("Payment", back_populates="staff")
class Language(Base):
__tablename__ = "language"
language_id = Column(SmallInteger, primary_key=True)
name = Column(String(20), nullable=False)
last_update = Column(DateTime, nullable=False)
class Inventory(Base):
__tablename__ = "inventory"
inventory_id = Column(Integer, primary_key=True)
film_id = Column(Integer, ForeignKey("film.film_id"), nullable=False)
store_id = Column(Integer, ForeignKey("store.store_id"), nullable=False)
last_update = Column(DateTime, nullable=False)
film = relationship("Film", back_populates="inventory")
store = relationship("Store", back_populates="inventory")
rentals = relationship("Rental", back_populates="inventory")
class FilmActor(Base):
__tablename__ = "film_actor"
actor_id = Column(Integer, ForeignKey("actor.actor_id"), primary_key=True)
film_id = Column(Integer, ForeignKey("film.film_id"), primary_key=True)
last_update = Column(DateTime, nullable=False)
class FilmCategory(Base):
__tablename__ = "film_category"
film_id = Column(Integer, ForeignKey("film.film_id"), primary_key=True)
category_id = Column(SmallInteger, ForeignKey("category.category_id"), primary_key=True)
last_update = Column(DateTime, nullable=False)