CRUD - Create Record
Creating records means:
- instantiate a model
- add it to the session
- commit
flowchart TD
A["obj = Model(...)"] --> B["transient -- the session has never seen it"]
B --> C["db.session.add(obj)"]
C --> D["pending -- in the session, not in the database"]
D --> E["db.session.flush()"]
E --> F["INSERT sent inside the open transaction"]
F --> G["the primary key is now populated"]
G --> H{"then what?"}
H -->|"db.session.commit()"| I["COMMIT -- permanent, visible to everyone"]
H -->|"db.session.rollback()"| J["ROLLBACK -- the INSERT is undone"]
D -.->|"commit() flushes for you"| F
Example
Section titled “Example”from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///app.db"
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
with app.app_context():
db.create_all()
user = User(username="ravi")
db.session.add(user)
db.session.commit()
print(user.id) # id is available after commitSession basics
Section titled “Session basics”db.sessionholds pending changescommit()finalizes the transaction
If something fails, you can:
db.session.rollback()Common pitfalls
Section titled “Common pitfalls”- Forgetting
commit()(data doesn’t persist) - Not handling
IntegrityError(unique constraint violations) - Doing heavy DB work inside request handlers without optimization
pch.coffeeTagline
pch.coffeeCtapch.feedbackHeading
pch.feedbackSubheading