Skip to content

Commit 58eb5e3

Browse files
committed
📝 Update README with basic example
1 parent dcea564 commit 58eb5e3

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

README.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,93 @@ Tools to generate Pydantic models from SQLAlchemy models.
44

55
Still experimental.
66

7+
## How to use
8+
9+
Quick example:
10+
11+
```Python
12+
from typing import List
13+
14+
from pydantic_sqlalchemy import sqlalchemy_to_pydantic
15+
from sqlalchemy import Column, ForeignKey, Integer, String, create_engine
16+
from sqlalchemy.ext.declarative import declarative_base
17+
from sqlalchemy.orm import Session, relationship, sessionmaker
18+
19+
Base = declarative_base()
20+
21+
engine = create_engine("sqlite://", echo=True)
22+
23+
24+
class User(Base):
25+
__tablename__ = "users"
26+
27+
id = Column(Integer, primary_key=True)
28+
name = Column(String)
29+
fullname = Column(String)
30+
nickname = Column(String)
31+
32+
addresses = relationship(
33+
"Address", back_populates="user", cascade="all, delete, delete-orphan"
34+
)
35+
36+
37+
class Address(Base):
38+
__tablename__ = "addresses"
39+
id = Column(Integer, primary_key=True)
40+
email_address = Column(String, nullable=False)
41+
user_id = Column(Integer, ForeignKey("users.id"))
42+
43+
user = relationship("User", back_populates="addresses")
44+
45+
46+
PydanticUser = sqlalchemy_to_pydantic(User)
47+
PydanticAddress = sqlalchemy_to_pydantic(Address)
48+
49+
50+
class PydanticUserWithAddresses(PydanticUser):
51+
addresses: List[PydanticAddress] = []
52+
53+
54+
Base.metadata.create_all(engine)
55+
56+
57+
LocalSession = sessionmaker(bind=engine)
58+
59+
db: Session = LocalSession()
60+
61+
ed_user = User(name="ed", fullname="Ed Jones", nickname="edsnickname")
62+
63+
address = Address(email_address="ed@example.com")
64+
address2 = Address(email_address="eddy@example.com")
65+
ed_user.addresses = [address, address2]
66+
db.add(ed_user)
67+
db.commit()
68+
69+
70+
def test_pydantic_sqlalchemy():
71+
user = db.query(User).first()
72+
pydantic_user = PydanticUser.from_orm(user)
73+
data = pydantic_user.dict()
74+
assert data == {
75+
"fullname": "Ed Jones",
76+
"id": 1,
77+
"name": "ed",
78+
"nickname": "edsnickname",
79+
}
80+
pydantic_user_with_addresses = PydanticUserWithAddresses.from_orm(user)
81+
data = pydantic_user_with_addresses.dict()
82+
assert data == {
83+
"fullname": "Ed Jones",
84+
"id": 1,
85+
"name": "ed",
86+
"nickname": "edsnickname",
87+
"addresses": [
88+
{"email_address": "ed@example.com", "id": 1, "user_id": 1},
89+
{"email_address": "eddy@example.com", "id": 2, "user_id": 1},
90+
],
91+
}
92+
```
93+
794
## License
895

996
This project is licensed under the terms of the MIT license.

0 commit comments

Comments
 (0)