Skip to content

Commit ba55547

Browse files
committed
SQLAlchemy tutorial part 2: ORM models.
1 parent 3dc3e81 commit ba55547

File tree

5 files changed

+53
-7
lines changed

5 files changed

+53
-7
lines changed

sqlalchemy_tutorial/__init__.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
"""Script entry point."""
22
import pprint
33

4-
from sqlalchemy_tutorial.database.engine import db
4+
from sqlalchemy_tutorial.database.connect import db
5+
from sqlalchemy_tutorial.database.models import create_tables
6+
from sqlalchemy_tutorial.orm import orm_create_user
57
from sqlalchemy_tutorial.queries import fetch_job_listings, update_job_listing
68

79
# Print formatter
@@ -10,7 +12,10 @@
1012

1113
def init_script():
1214
"""Demonstrate SELECT and UPDATE queries with SQLAlchemy."""
15+
create_tables()
1316
rows_selected = fetch_job_listings(db)
1417
pp.pprint(rows_selected)
1518
rows_updated = update_job_listing(db)
1619
print(rows_updated)
20+
user = orm_create_user()
21+
print(user)
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
from .engine import db
1+
from .connect import db, session

sqlalchemy_tutorial/database/engine.py renamed to sqlalchemy_tutorial/database/connect.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Create database connection."""
22
from sqlalchemy import create_engine
3-
from sqlalchemy.orm import Session
3+
from sqlalchemy.orm import sessionmaker
44

55
from config import SQLALCHEMY_DATABASE_PEM, SQLALCHEMY_DATABASE_URI
66

@@ -12,4 +12,5 @@
1212
)
1313

1414
# Create database session
15-
session = Session(db)
15+
Session = sessionmaker(bind=db)
16+
session = Session()

sqlalchemy_tutorial/database/models.py

+24-3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,32 @@
44
from sqlalchemy.orm import relationship
55
from sqlalchemy.sql import func
66

7-
from sqlalchemy_tutorial.database import engine
7+
from sqlalchemy_tutorial.database import db
88

99
Base = declarative_base()
1010

1111

12+
class User(Base):
13+
"""User account."""
14+
15+
__tablename__ = "user"
16+
17+
id = Column(Integer, primary_key=True, autoincrement="auto")
18+
username = Column(String(255), unique=True, nullable=False)
19+
password = Column(Text, nullable=False)
20+
email = Column(String(255), unique=True, nullable=False)
21+
first_name = Column(String(255))
22+
last_name = Column(String(255))
23+
bio = Column(Text)
24+
avatar_url = Column(Text)
25+
last_seen = Column(DateTime)
26+
created_at = Column(DateTime, server_default=func.now())
27+
updated_at = Column(DateTime, onupdate=func.now())
28+
29+
def __repr__(self):
30+
return "<User %r>" % self.username
31+
32+
1233
class Player(Base):
1334
"""Individual player belonging to a team."""
1435

@@ -20,7 +41,7 @@ class Player(Base):
2041
last_name = Column(String(255), nullable=False)
2142
position = Column(String(100), nullable=False)
2243
injured = Column(Boolean)
23-
description = Column(Text, nullable=True)
44+
description = Column(Text)
2445
created_at = Column(DateTime, server_default=func.now())
2546
updated_at = Column(DateTime, onupdate=func.now())
2647

@@ -49,4 +70,4 @@ def __repr__(self):
4970

5071

5172
def create_tables():
52-
return Base.metadata.create_all(engine)
73+
return Base.metadata.create_all(db)

sqlalchemy_tutorial/orm.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
"""Demonstrate the SQLAlchemy ORM"""
2+
from sqlalchemy_tutorial.database import session
3+
from sqlalchemy_tutorial.database.models import User
4+
5+
6+
def orm_create_user():
7+
"""Create a new instance of our `User` model."""
8+
user = User(
9+
username="admin",
10+
password="Please don't set passwords like this",
11+
12+
first_name="Todd",
13+
last_name="Birchard",
14+
bio="I write tutorials on the internet.",
15+
avatar_url="https://storage.googleapis.com/hackersandslackers-cdn/authors/[email protected]",
16+
)
17+
18+
session.add(user) # Add the user
19+
session.commit() # Commit the change

0 commit comments

Comments
 (0)