Post

数据库访问

数据库访问

sqlalchemy

定义数据模型

1
2
3
4
5
6
7
8
9
10
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

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

连接数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from sqlalchemy import create_engine

# SQLite (生成一个本地文件 example.db)
engine = create_engine("sqlite:///example.db")

# MySQL (需安装 pymysql)
engine = create_engine("mysql+pymysql://user:password@localhost/mydatabase")

# PostgreSQL (需安装 psycopg2)
engine = create_engine("postgresql+psycopg2://user:password@localhost/mydatabase")


# 创建表(如果表不存在)
Base.metadata.create_all(engine)

CRUD

会话

1
2
3
4
5
6
7
8
from sqlalchemy.orm import sessionmaker

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 关闭会话
session.close()
1
2
3
4
5
# 上下文管理器:可以自动管理会话生命周期
with Session() as session:
    user = User(name="Bob", age=25)
    session.add(user)
    session.commit() 

新增数据

1
2
3
new_user = User(name="Alice", age=23)
session.add(new_user)
session.commit()

查询数据

1
2
3
4
5
6
7
8
# 查询所有用户
users = session.query(User).all()

# 条件查询
user = session.query(User).filter_by(name="Alice").first()

# 条件查询
user = session.query(User).filter(User.age > 25).all()

更新数据

1
2
3
user = session.query(User).filter_by(name="Alice").first()
user.age = 31
session.commit()

删除数据

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

回滚事务

1
2
3
4
5
6
try:
    # 执行操作
    session.commit()
except:
    session.rollback()  # 出错时回滚
    raise
This post is licensed under CC BY 4.0 by the author.