成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 數據庫操作神器,一文掌握 ORM!

開發(fā)
SQLAlchemy 是 Python 最強大的 ORM 框架,支持 MySQL、PostgreSQL、SQLite、SQL Server 等數據庫。本篇文章帶你 從入門到實戰(zhàn),徹底掌握 SQLAlchemy!

你是否遇到這些問題?

  • 還在手寫 SQL?數據庫操作太麻煩?
  • Django ORM 用過,但想在 Flask 中也用 ORM?
  • SQLAlchemy 怎么連接數據庫?如何查詢數據?

SQLAlchemy 是 Python 最強大的 ORM 框架,支持 MySQL、PostgreSQL、SQLite、SQL Server 等數據庫。本篇文章帶你 從入門到實戰(zhàn),徹底掌握 SQLAlchemy!

1. 什么是 SQLAlchemy?為什么要用 ORM?

SQLAlchemy 是 Python 的 ORM(對象關系映射)框架,可以用 Python 代碼 直接操作數據庫,而 不需要寫 SQL。

為什么要用 ORM?

  • 數據庫操作更 Pythonic(面向對象)
  • 兼容多種數據庫(MySQL、PostgreSQL、SQLite 等)
  • 自動生成 SQL,避免 SQL 注入風險
  • 更易維護,代碼比 SQL 語句更清晰

傳統 SQL 操作(手寫 SQL):

import sqlite3

conn = sqlite3.connect("test.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")
conn.commit()
cursor.close()
conn.close()

SQLAlchemy 操作(ORM 方式):

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

engine = create_engine("sqlite:///test.db")
Base = declarative_base()

classUser(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

new_user = User(name="Alice", age=25)
session.add(new_user)
session.commit()

SQLAlchemy 讓數據庫操作更清晰、更 Pythonic!

2. 安裝 & 配置 SQLAlchemy

(1) 安裝 SQLAlchemy

pip install sqlalchemy

如果使用 MySQL,需要額外安裝 MySQL 驅動:

pip install pymysql

(2) 創(chuàng)建數據庫連接

from sqlalchemy import create_engine

# 連接 SQLite
engine = create_engine("sqlite:///test.db")

# 連接 MySQL(需要安裝 pymysql)
# engine = create_engine("mysql+pymysql://user:password@localhost/dbname")

SQLAlchemy 通過 create_engine() 統一管理數據庫連接!

3. 創(chuàng)建 ORM 模型(定義數據表)

定義一個 User 表:

from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    age = Column(Integer)

# 創(chuàng)建表
Base.metadata.create_all(engine)

ORM 方式定義表結構,避免手寫 SQL !

4. CRUD 操作(增刪改查)

(1) 創(chuàng)建數據庫會話

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

所有數據庫操作都通過 session 進行!

(2) 插入數據(Create)

new_user = User(name="Alice", age=25)
session.add(new_user)
session.commit()

使用 session.add() 添加新數據,commit() 提交!

(3) 查詢數據(Read)

  • 查詢所有用戶
users = session.query(User).all()
for user in users:
    print(user.id, user.name, user.age)
  • 按條件查詢
user = session.query(User).filter_by(name="Alice").first()
print(user.id, user.name, user.age)
  • 多條件查詢
from sqlalchemy import and_, or_

# 年齡 > 20 且姓名是 Alice
users = session.query(User).filter(and_(User.age > 20, User.name == "Alice")).all()

# 年齡 > 20 或 姓名是 Alice
users = session.query(User).filter(or_(User.age > 20, User.name == "Alice")).all()

filter() 方式類似 SQL WHERE 語句!

(4) 更新數據(Update)

user = session.query(User).filter_by(name="Alice").first()
user.age = 30
session.commit()

直接修改對象屬性,再 commit() 保存!

(5) 刪除數據(Delete)

user = session.query(User).filter_by(name="Alice").first()
session.delete(user)
session.commit()

使用 session.delete() 刪除對象!

5. 進階操作:一對多 & 多對多

(1) 一對多關系(User → Post)

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship

class Post(Base):
    __tablename__ = "posts"
    id = Column(Integer, primary_key=True)
    title = Column(String(100))
    user_id = Column(Integer, ForeignKey("users.id"))

    user = relationship("User", back_populates="posts")

User.posts = relationship("Post", order_by=Post.id, back_populates="user")

relationship() 讓表之間建立關系,查詢時更方便!

(2) 多對多關系(User ? Course)

from sqlalchemy import Table

# 關聯表
user_course = Table(
    "user_course", Base.metadata,
    Column("user_id", Integer, ForeignKey("users.id")),
    Column("course_id", Integer, ForeignKey("courses.id"))
)

classCourse(Base):
    __tablename__ = "courses"
    id = Column(Integer, primary_key=True)
    name = Column(String(100))

    users = relationship("User", secondary=user_course, back_populates="courses")

User.courses = relationship("Course", secondary=user_course, back_populates="users")

多對多關系通過 secondary 關聯表實現!

6. SQLAlchemy vs 直接寫 SQL,哪種更好?

方式

ORM(SQLAlchemy)

手寫 SQL

代碼可讀性

? 高,可維護性好

? 低,SQL 語句較長

數據庫兼容性

? 兼容 MySQL、PostgreSQL、SQLite

? 需改寫 SQL 適配不同數據庫

安全性

? 避免 SQL 注入

? 需手動防 SQL 注入

性能

? ORM 有一定性能損耗

? SQL 執(zhí)行更快

開發(fā)效率

? 高效,操作數據庫像操作對象

? 需要手寫 SQL

  • 小型項目、簡單查詢 → ORM 更方便!
  • 復雜查詢、大數據量操作 → SQL 更高效!

7. 結語:SQLAlchemy 讓 Python 操作數據庫更簡單!

  • ORM 讓數據庫操作更直觀,不用手寫 SQL!
  • SQLAlchemy 適用于大部分項目,靈活易用,功能強大!
責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2023-03-27 16:44:23

2016-12-06 19:46:40

云數據庫

2025-04-07 08:20:00

ORMPython代碼

2023-10-24 11:44:21

2022-07-28 09:02:41

文件存儲系統

2022-12-20 07:39:46

2023-12-21 17:11:21

Containerd管理工具命令行

2022-10-21 17:24:34

契約測試定位

2023-07-17 10:45:03

向量數據庫NumPy

2023-07-14 08:00:00

ORMRust ORMSQL

2017-11-28 15:20:27

Python語言編程

2024-11-19 09:00:00

Pythondatetime模塊

2020-07-16 07:30:15

數據庫SQL技術

2021-05-12 18:22:36

Linux 內存管理

2023-02-13 23:39:48

數據庫Mongodb存儲

2023-12-26 07:40:34

2024-01-11 07:32:00

2023-11-29 16:16:14

Redis數據庫

2021-07-21 09:24:25

MongoDB數據庫 Python

2024-12-04 13:02:34

數據庫分庫分表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区精品 | 精品不卡 | 国产欧美日韩综合精品一区二区 | 搞黄网站在线观看 | 国产成人一区在线 | 日韩精品视频在线观看一区二区三区 | 999热视频| 国产一区二区三区在线 | 成人在线电影在线观看 | 国内精品久久精品 | 一区二区免费在线观看 | 国产一区2区 | 精品亚洲一区二区三区四区五区 | 亚洲精品一区二区另类图片 | 99久久免费精品国产男女高不卡 | 久久久看 | 国产精品一区网站 | 久久久久久久久精 | 888久久久 | 日韩精品视频一区二区三区 | 中文二区 | 日韩一区在线观看视频 | 久久777| 中文字幕日韩专区 | 成人动漫视频网站 | 精品欧美色视频网站在线观看 | 免费观看www7722午夜电影 | 毛片一区二区 | 免费欧美 | 国产成人在线一区二区 | 亚洲福利视频网 | 亚洲一区二区三区四区在线观看 | 99免费视频 | 亚洲精品一区二区网址 | 亚洲欧美中文日韩在线v日本 | 国产在线一区二区三区 | 欧美一级高潮片免费的 | 欧美成人一区二区 | 玖玖综合在线 | 男人天堂网av | 日韩欧美二区 |