Python SQLAlchemy使用举例
HDUZN

SQLAlchemy 提供了 ORM 功能,可以将 Python 对象映射到关系数据库中的表,从而简化了数据访问。它允许开发人员使用 Python 对关系数据库进行 SQL 操作,而不必直接编写 SQL 查询语句。

SQLAlchemy 支持多种数据库,包括 MySQL、PostgreSQL、SQLite、Oracle、MSSQL 等。

自己主要在 Flask中使用,所以安装的是 flask_sqlalchemy 库,安装:

1
pip install flask_sqlalchemy

1.初始化(创建表)

创建 User 类对应的表 users。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from flask_sqlalchemy import SQLAlchemy

current_dir = os.getcwd()
db_file = os.path.join(current_dir, 'static', 'db', 'data.db')
# 配置数据库地址
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_file}'
# 跟踪数据库的修改-->不建议开启未来的版本中会移除
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

# 数据库的模型,需要继承db. Model
class User(db.Model) :
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64)) # 用户名
password = db.Column(db.String(128)) # 密码
phone = db.Column(db.String(11), unique=True) # 手机号

# db init
def db_init():
with app.app_context():
# 删除表
db.drop_all()
# 创建表
db.create_all()

db_init()

2.增(插入数据)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def insert_test_data():
# 插入一条数据
new_user = User(name='张三',password='123',phone='12345674567')
db.session.add(new_user)
db.session.commit()

# 插入多条数据
users = [
User(name='张三', password='123', phone='12345678901'),
User(name='李四', password='456', phone='12345678902'),
# 更多用户...
]
db.session.add_all(users)
db.session.commit()

3.删(删除数据)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def delete_user(phone):
# 删除一个用户
# 获取这个用户的 User 对象
user = User.query.filter_by(phone=phone).first()
# 如果这个用户存在
if user:
# 删除这个用户
db.session.delete(user)
db.session.commit()

# 批量删除用户
del_phones = ['12345678801', '12345678802', '12345678803']
User.query.filter(User.phone.in_(del_phones)).delete(synchronize_session=False)
db.session.commit()

4.改(修改数据)

1
2
3
4
5
6
7
8
def change_password(phone, new_password):
# 获取这个用户的 User 对象
user = User.query.filter_by(phone=phone).first()
# 如果这个用户存在
if user:
# 修改这个用户的密码
user.password = new_password
db.session.commit()

5.查(查询数据)

filter_by 和 filter 都是 SQLAlchemy 中用于过滤查询结果的方法,但是它们的使用方式和功能有一些不同。

  • filter_by: 是一个简化的过滤方法,它接受关键字参数,每个关键字参数表示一个等于条件。
  • filter: 是一个更通用的过滤方法,它接受任何条件表达式。也就是说用的范围更广。
1
2
3
4
5
6
7
8
# filter_by
# 查询一条记录,一个条件
user = User.query.filter_by(phone=phone).first()
# 查询一条记录,多个条件
user = User.query.filter_by(phone=phone, password=password).first()

# 查询多条记录
users = User.query.filter_by(name=name).all()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from sqlalchemy import and_
# filter
# 查询一条记录,一个条件
user = User.query.filter(User.name=='张三').first()
# 查询一条记录,多个条件
user = User.query.filter(and_(User.phone==phone, User.password==password)).first()

# 查询多条记录
users = User.query.filter(User.name == name).all()
# 查询所有张开头的用户
users = User.query.filter(User.name.like('张%')).all()
# 查询phones列表中的所有用户
phones = ['12345678801', '12345678802', '12345678803']
users = User.query.filter(User.phone.in_(phones)).all()

PS.用 User.query.filter_by 和用 db.session.query(User).filter_by 功能上是一样的。

  • 本文标题:Python SQLAlchemy使用举例
  • 本文作者:HDUZN
  • 创建时间:2023-12-24 21:44:29
  • 本文链接:http://hduzn.cn/2023/12/24/Python-SQLAlchemy使用举例/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论