Skip to content

Commit 6609345

Browse files
author
Steven Chen
committed
one to one orm
1 parent 1fdc70a commit 6609345

3 files changed

Lines changed: 93 additions & 0 deletions

File tree

12_one_to_one_orm/__init__.py

Whitespace-only changes.

12_one_to_one_orm/db_init.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import datetime
2+
3+
from sqlalchemy import create_engine, String, ForeignKey, Table, Column
4+
from sqlalchemy.ext.declarative import declarative_base
5+
from sqlalchemy.orm import sessionmaker, Mapped, mapped_column, relationship
6+
from typing_extensions import Annotated
7+
from typing import List, Set
8+
9+
10+
engine = create_engine('mysql://root:test@localhost/testdb', echo=True)
11+
Base = declarative_base()
12+
13+
14+
int_pk = Annotated[int, mapped_column(primary_key=True)]
15+
required_unique_string = Annotated[str, mapped_column(String(128), unique=True, nullable=False)]
16+
required_string = Annotated[str, mapped_column(String(128), nullable=False)]
17+
18+
19+
class Employee(Base):
20+
__tablename__ = "employee"
21+
22+
id: Mapped[int_pk]
23+
name: Mapped[required_unique_string]
24+
computer_id: Mapped[int] = mapped_column(ForeignKey("computer.id"), nullable=True)
25+
26+
computer = relationship("Computer", lazy=False, back_populates="employee")
27+
28+
def __repr__(self):
29+
return f'id: {self.id}, name: {self.name}'
30+
31+
32+
class Computer(Base):
33+
__tablename__ = "computer"
34+
35+
id: Mapped[int_pk]
36+
model: Mapped[required_string]
37+
number: Mapped[required_unique_string]
38+
39+
employee = relationship("Employee", lazy=True, back_populates="computer")
40+
41+
def __repr__(self):
42+
return f'id: {self.id}, model: {self.model}, number: {self.number}'
43+
44+
45+
Base.metadata.create_all(engine)
46+
Session = sessionmaker(bind=engine)

12_one_to_one_orm/query.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from db_init import Session, Employee, Computer
2+
3+
4+
def insert(s):
5+
c1 = Computer(model="Dell", number="1111")
6+
c2 = Computer(model="Surface", number="2222")
7+
c3 = Computer(model="MacBook Pro", number="3333")
8+
9+
e1 = Employee(name="Jack", computer=c1)
10+
e2 = Employee(name="Mary", computer=c2)
11+
e3 = Employee(name="Tome", computer=c3)
12+
13+
s.add_all([e1, e2, e3])
14+
15+
s.commit()
16+
17+
18+
def select(s):
19+
e = s.query(Employee).filter(Employee.id == 1).scalar()
20+
if e:
21+
print(e)
22+
print(e.computer)
23+
24+
c = s.query(Computer).filter(Computer.id == 2).scalar()
25+
if c:
26+
print(c)
27+
print(c.employee)
28+
29+
30+
def update_1(s):
31+
s.query(Employee).filter(Employee.id == 3).update({Employee.computer_id: None})
32+
s.commit()
33+
34+
35+
def update_2(s):
36+
c = s.query(Computer).filter(Computer.id == 3).scalar()
37+
e = s.query(Employee).filter(Employee.id == 3).scalar()
38+
if c and e:
39+
e.computer = c
40+
s.commit()
41+
42+
43+
session = Session()
44+
# insert(session)
45+
# select(session)
46+
# update_1(session)
47+
update_2(session)

0 commit comments

Comments
 (0)