-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdbase_orm.py
71 lines (60 loc) · 2.36 KB
/
dbase_orm.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env python3
from pathlib import Path
from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, ForeignKey, Date
from sqlalchemy.orm import declarative_base, relationship
data_folder = Path("data")
data_folder.mkdir(parents=True, exist_ok=True)
engine = create_engine('sqlite:///data/db.sqlite3', echo=True)
Base = declarative_base()
employees_allergies_table = Table(
"employees_allergies",
Base.metadata,
Column("user_id", ForeignKey("employees.id")),
Column("allergen_id", ForeignKey("ingredients.id")),
)
cake_ingredients_table = Table(
"cake_ingredients",
Base.metadata,
Column("cake_id", ForeignKey("cakes.id")),
Column("ingredient_id", ForeignKey("ingredients.id")),
)
class Employee(Base):
__tablename__ = "employees"
id = Column(Integer, primary_key = True)
name = Column(String)
birthday = Column(Date)
allergies = relationship("Ingredient",
secondary=employees_allergies_table,
lazy = 'joined')
def __repr__(self):
return (f"Employee(id={self.id!r}, dob={self.birthday!s}, "
f" name={self.name!r}, allergies={self.allergies!r})")
class Cake(Base):
__tablename__ = "cakes"
id = Column(Integer, primary_key = True)
name = Column(String)
previewDescription = Column(String)
ingredients = relationship("Ingredient",
secondary = cake_ingredients_table,
lazy = 'joined')
def __repr__(self):
return (f"Cake(id={self.id!r}, name={self.name!r}, "
f"ingredeints={self.ingredients!r})")
class Ingredient(Base):
__tablename__ = "ingredients"
id = Column(Integer, primary_key = True)
name = Column(String)
def __repr__(self):
return f"Ingredient(id={self.id!r}, name={self.name!r})"
class Assignment(Base):
__tablename__ = "assignments"
id = Column(Integer, primary_key = True)
fromId = Column(ForeignKey("employees.id"))
toId = Column(ForeignKey("employees.id"))
cakeId = Column(ForeignKey("cakes.id"))
def __repr__(self):
return (f"Assignment(Employee[{self.fromId!r}] bakes "
f"Cake[{self.cakeId}] for Employee[{self.toId!r}])")
# NOTE: Make sure this does not delete dbase records
Base.metadata.create_all(engine)