126 lines
2.2 KiB
Python
126 lines
2.2 KiB
Python
# ---
|
|
# jupyter:
|
|
# jupytext:
|
|
# text_representation:
|
|
# extension: .py
|
|
# format_name: percent
|
|
# format_version: '1.3'
|
|
# jupytext_version: 1.11.2
|
|
# kernelspec:
|
|
# display_name: Python 3
|
|
# language: python
|
|
# name: python3
|
|
# ---
|
|
|
|
# %%
|
|
import sqlalchemy
|
|
|
|
print(sqlalchemy.__version__)
|
|
|
|
# %%
|
|
from sqlalchemy import create_engine
|
|
|
|
engine = create_engine("sqlite:///:memory:", echo=True)
|
|
|
|
# %%
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
|
|
Base = declarative_base()
|
|
|
|
# %%
|
|
from sqlalchemy import Column, Integer, String
|
|
|
|
|
|
class User(Base):
|
|
__tablename__ = "users"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String)
|
|
fullname = Column(String)
|
|
nickname = Column(String)
|
|
|
|
def __repr__(self):
|
|
return "<User(name='%s', fullname='%s', nickname='%s')>" % (
|
|
self.name,
|
|
self.fullname,
|
|
self.nickname,
|
|
)
|
|
|
|
|
|
# %%
|
|
print(User.__table__)
|
|
|
|
# %%
|
|
Base.metadata.create_all(engine)
|
|
|
|
# %%
|
|
ed_user = User(name="ed", fullname="Ed Jones", nickname="edsnickname")
|
|
print(ed_user.name)
|
|
print(ed_user.nickname)
|
|
print(str(ed_user.id))
|
|
|
|
# %%
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
Session = sessionmaker(bind=engine)
|
|
session = Session()
|
|
|
|
# %% [markdown]
|
|
# # Adding and Updating Objects
|
|
|
|
# %%
|
|
ed_user = User(name="ed", fullname="Ed Jones", nickname="edsnickname")
|
|
session.add(ed_user)
|
|
|
|
# %%
|
|
our_user = session.query(User).filter_by(name="ed").first()
|
|
print(our_user)
|
|
|
|
# %%
|
|
print(ed_user is our_user)
|
|
|
|
# %%
|
|
session.add_all(
|
|
[
|
|
User(name="wendy", fullname="Wendy Williams", nickname="windy"),
|
|
User(name="mary", fullname="Mary Contrary", nickname="mary"),
|
|
User(name="fred", fullname="Fred Flintstone", nickname="freddy"),
|
|
]
|
|
)
|
|
|
|
# %%
|
|
ed_user.nickname = "eddie"
|
|
|
|
# %%
|
|
print(session.dirty)
|
|
|
|
# %%
|
|
print(session.new)
|
|
|
|
# %%
|
|
session.commit()
|
|
|
|
# %%
|
|
print(ed_user.id)
|
|
|
|
# %% [markdown]
|
|
# # Rolling back
|
|
|
|
# %%
|
|
ed_user.name = "Edwardo"
|
|
|
|
# %%
|
|
fake_user = User(name="fakeuser", fullname="Invalid", nickname="12345")
|
|
session.add(fake_user)
|
|
|
|
# %%
|
|
session.query(User).filter(User.name.in_(["Edwardo", "fakeuser"])).all()
|
|
|
|
# %%
|
|
session.rollback()
|
|
print(ed_user.name)
|
|
print(fake_user in session)
|
|
|
|
# %%
|
|
session.query(User).filter(User.name.in_(["ed", "fakeuser"])).all()
|