Skip to content

Commit

Permalink
Updated code example
Browse files Browse the repository at this point in the history
  • Loading branch information
Arjan Egges committed Mar 5, 2024
1 parent 5c17b29 commit 2702fa0
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 41 deletions.
18 changes: 9 additions & 9 deletions 2024/sqlalchemy/oop_approach.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
import sqlalchemy as sa
from sqlalchemy.orm import Mapped, mapped_column, sessionmaker, declarative_base

db = sa.create_engine('sqlite:///:memory:')
Session = sessionmaker(bind = db)
db = sa.create_engine("sqlite:///:memory:")
Session = sessionmaker(bind=db)
Base = declarative_base()


class User(Base):
__tablename__ = 'users'
__tablename__ = "users"

id: Mapped[int] = mapped_column(primary_key = True)
username: str = sa.Column(sa.String)
email: str = sa.Column(sa.String)
id: Mapped[int] = mapped_column(primary_key=True)
username: Mapped[str]
email: Mapped[str]

def __repr__(self) -> str:
return f'<User(username={self.username}, email={self.email})>'
return f"<User(id={self.id}, username={self.username}, email={self.email})>"


def main() -> None:
Base.metadata.create_all(db)
user = User(username = 'Arjan', email = "[email protected]")
user = User(username="Arjan", email="[email protected]")

with Session() as session:
session.add(user)
session.commit()
print(session.query(User).all())


if __name__ == '__main__':
if __name__ == "__main__":
main()
60 changes: 37 additions & 23 deletions 2024/sqlalchemy/relationship.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,48 @@
import hashlib
import typing
import sqlalchemy as sa
from sqlalchemy.orm import declarative_base, mapped_column, relationship, sessionmaker, Mapped

db = sa.create_engine('sqlite:///:memory:')
Session = sessionmaker(bind = db)
from sqlalchemy.orm import (
declarative_base,
mapped_column,
relationship,
sessionmaker,
Mapped,
)

db = sa.create_engine("sqlite:///:memory:")
Session = sessionmaker(bind=db)
Base = declarative_base()


class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key = True)
auth: Mapped["UserAuth"] = relationship('UserAuth', uselist = False, back_populates = 'user')
posts: Mapped[typing.List["UserPost"]] = relationship('UserPost', back_populates = 'user')
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True)
auth: Mapped["UserAuth"] = relationship(
"UserAuth", uselist=False, back_populates="user"
)
posts: Mapped[typing.List["UserPost"]] = relationship(
"UserPost", back_populates="user"
)

def __init__(self, username: str, email: str, password: str):
super().__init__()
self.auth = UserAuth(username = username, email = email)
self.auth = UserAuth(username=username, email=email)
self.auth.set_password(password)

def __repr__(self) -> str:
return f'<User(username={self.auth.username}, email={self.auth.email})>'
return f"<User(username={self.auth.username}, email={self.auth.email})>"


class UserAuth(Base):
__tablename__ = 'user_auth'
__tablename__ = "user_auth"

id: int = sa.Column(sa.Integer, sa.ForeignKey('users.id'), primary_key = True, index = True, unique = True)
id: int = sa.Column(
sa.Integer, sa.ForeignKey("users.id"), primary_key=True, index=True, unique=True
)
username: str = sa.Column(sa.String)
email: str = sa.Column(sa.String, unique = True)
email: str = sa.Column(sa.String, unique=True)
password_hash: str = sa.Column(sa.String)
user: Mapped["User"] = relationship('User', back_populates = 'auth')
user: Mapped["User"] = relationship("User", back_populates="auth")

def __init__(self, username: str, email: str):
self.username = username
Expand All @@ -43,26 +55,28 @@ def check_password(self, password: str) -> bool:
return self.password_hash == hashlib.sha256(password.encode()).hexdigest()

def __repr__(self) -> str:
return f'<UserAuth(username={self.username}, email={self.email})>'
return f"<UserAuth(username={self.username}, email={self.email})>"


class UserPost(Base):
__tablename__ = 'user_posts'
id: int = sa.Column(sa.Integer, primary_key = True)
user_id: int = sa.Column(sa.Integer, sa.ForeignKey('users.id'), nullable = False, index = True)
__tablename__ = "user_posts"
id: int = sa.Column(sa.Integer, primary_key=True)
user_id: int = sa.Column(
sa.Integer, sa.ForeignKey("users.id"), nullable=False, index=True
)
content: str = sa.Column(sa.String)
user: Mapped["User"] = relationship('User', back_populates = 'posts')
user: Mapped["User"] = relationship("User", back_populates="posts")

def __repr__(self) -> str:
return f'<UserPost(user={self.user}, content={self.content})>'
return f"<UserPost(user={self.user}, content={self.content})>"


def main() -> None:
Base.metadata.create_all(db)

with Session.begin() as session:
user = User(username = 'Arjan', email = "[email protected]", password = "password")
post = UserPost(content = 'Hello World!', user = user)
user = User(username="Arjan", email="[email protected]", password="password")
post = UserPost(content="Hello World!", user=user)
session.add(user)
session.add(post)

Expand All @@ -79,5 +93,5 @@ def main() -> None:
print(posts)


if __name__ == '__main__':
if __name__ == "__main__":
main()
19 changes: 10 additions & 9 deletions 2024/sqlalchemy/simple_approach.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
import sqlalchemy as sa

engine = sa.create_engine('sqlite:///:memory:')
engine = sa.create_engine("sqlite:///:memory:")
connection = engine.connect()

metadata = sa.MetaData()

user_table = sa.Table(
'user', metadata,
sa.Column('id', sa.Integer, primary_key = True),
sa.Column('username', sa.String),
sa.Column('email', sa.String),
"user",
metadata,
sa.Column("id", sa.Integer, primary_key=True),
sa.Column("username", sa.String),
sa.Column("email", sa.String),
)


def insert_user(username:str, email:str) -> None:
query = user_table.insert().values(username = username, email = email)
def insert_user(username: str, email: str) -> None:
query = user_table.insert().values(username=username, email=email)
connection.execute(query)


def select_user(username:str) -> sa.engine.Result:
def select_user(username: str) -> sa.engine.Result:
query = user_table.select().where(user_table.c.username == username)
result = connection.execute(query)
return result.fetchone()
Expand All @@ -31,5 +32,5 @@ def main() -> None:
connection.close()


if __name__ == '__main__':
if __name__ == "__main__":
main()

0 comments on commit 2702fa0

Please sign in to comment.