SQLAlchemy ORM 基础
开始使用 SQLAlchemy 对象关系映射器(ORM)定义数据库模型并与数据库交互。
SQLAlchemy ORM 基础 是 CoddyKit 上的免费 FastAPI Backend Development Bootcamp 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 FastAPI Backend Development Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 FastAPI Backend Development Bootcamp 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Bridging Code and Databases
Welcome to SQLAlchemy ORM! You'll learn how to connect your Python code to a database in a powerful, object-oriented way.
An Object Relational Mapper (ORM) is a tool that helps you interact with a database using objects from your programming language, instead of writing raw SQL.
- It maps database tables to Python classes.
- It maps database rows to Python objects.
- It maps database columns to Python attributes.
This makes database operations feel more like working with regular Python objects.
Meet SQLAlchemy: Your ORM Tool
SQLAlchemy is a comprehensive and powerful ORM for Python. It provides a full suite of well-known persistence patterns for efficient and high-performing database access.
We'll focus on its ORM capabilities, which allow you to define your database structure (schema) using Python classes and interact with data using instances of those classes.
It supports many databases, including SQLite, PostgreSQL, MySQL, and more!
The Foundation: Declarative Base
To start defining our database models, we need a special base class. SQLAlchemy's Declarative Base provides this foundation.
It's essentially a factory that generates a base class which your ORM models will inherit from. This base class connects your Python classes to the underlying database tables.
Here's how you get it:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()Defining Your First Model
Once you have your Base, you can define your database tables as Python classes. Each class will represent a table, and its attributes will represent the columns.
Let's create a simple User model. It will have an id and a name.
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))Model Attributes: Columns
In our User model, id and name are defined using Column objects. The Column function lets you specify details about each database column:
- Data Type:
Integerfor whole numbers,Stringfor text. SQLAlchemy has many more! - Primary Key:
primary_key=Truemarks a column as the unique identifier for each row. - Length:
String(50)sets a maximum length for text fields. - Nullable: By default, columns are nullable. You can set
nullable=Falseto require a value.
The __tablename__ attribute is crucial; it tells SQLAlchemy the actual name of the table in your database.
Setting Up the Database Engine
Before we can create tables or interact with the database, SQLAlchemy needs to know where it is! This is where the Engine comes in.
An Engine is the starting point for any SQLAlchemy application. It connects your application to a specific database using a connection string.
For simplicity, we'll use an in-memory SQLite database, which is great for testing as it disappears when the program ends:
from sqlalchemy import create_engine
# Connect to an in-memory SQLite database
engine = create_engine('sqlite:///:memory:')
# For a file-based SQLite database:
# engine = create_engine('sqlite:///./test.db')Creating Database Tables
With our Base, defined models, and engine, we can now create the actual database tables!
The Base.metadata.create_all(engine) method inspects all classes that inherit from Base and creates the corresponding tables in the database connected by the engine.
If the tables already exist, SQLAlchemy won't try to recreate them, preventing errors.
Full Example: Define & Create
Let's put it all together! Run this code to see how to define a model and create its table in an in-memory SQLite database.
Notice how we import everything needed, define Base, create our User model, set up the engine, and finally, create the tables.
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
# 1. Define the Base for ORM models
Base = declarative_base()
# 2. Define a Model (e.g., User table)
class User(Base):
__tablename__ = 'users' # The actual table name in the database
id = Column(Integer, primary_key=True) # Unique ID, automatically managed
name = Column(String(50), nullable=False) # User's name, max 50 chars, required
# A helpful representation for printing User objects
def __repr__(self):
return f"<User(id={self.id}, name='{self.name}')>"
# 3. Create a database engine
# Using an in-memory SQLite database for simplicity
engine = create_engine('sqlite:///:memory:')
# 4. Create all tables defined in Base
Base.metadata.create_all(engine)
print("Database tables created successfully!")
print("The 'users' table is now ready for data.")Your Database Interaction Hub: The Session
Defining models and creating tables are just the first steps. To actually interact with the data (add, query, update, delete), you need a Session.
A Session is like a temporary workspace for your database operations. It holds all the objects you've loaded or created and keeps track of changes.
You create a Session using sessionmaker and bind it to your engine:
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
# (Assume 'engine' is already created as shown before)
engine = create_engine('sqlite:///:memory:')
# Create a Session factory
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# To get a session:
# db = SessionLocal()
# try:
# # Perform operations with db
# pass
# finally:
# db.close()Quick Check: Model Setup
You've learned how to set up the basics of SQLAlchemy ORM. Let's test your understanding of the core components.
Recap: SQLAlchemy ORM Basics
Great job! You've taken your first steps into the world of SQLAlchemy ORM.
Here's what we covered:
- What is an ORM: Maps Python objects to database tables.
- SQLAlchemy: A powerful Python ORM.
- Declarative Base: The foundation (
Base = declarative_base()) for your models. - Defining Models: Creating Python classes (like
User) that inherit fromBase. - Columns: Using
Columnwith data types (Integer,String) and attributes (primary_key). - Engine: Connecting to your database (
create_engine). - Table Creation: Bringing models to life in the database (
Base.metadata.create_all(engine)). - Session: Your workspace for database interactions (
sessionmaker).
Next, we'll learn how to add, query, update, and delete data using these concepts!
常见问题解答
「SQLAlchemy ORM 基础」课时是免费的吗?
是的 — 「SQLAlchemy ORM 基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 FastAPI Backend Development Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 FastAPI Backend Development Bootcamp 课程共包含 4 节课。
「SQLAlchemy ORM 基础」这节课中我会学到什么?
开始使用 SQLAlchemy 对象关系映射器(ORM)定义数据库模型并与数据库交互。 你通过在浏览器中直接运行的动手代码来练习 FastAPI Backend Development Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 FastAPI Backend Development Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 FastAPI Backend Development Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「SQLAlchemy ORM 基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 FastAPI Backend Development Bootcamp 课中编写并运行代码吗?
能。每节 FastAPI Backend Development Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- SQLAlchemy ORM 基础
- 将 FastAPI 连接到 PostgreSQL
- 使用 SQLAlchemy 执行 CRUD 操作
- 使用 Alembic 进行数据库迁移