-
primary_key
: 布尔类型,设置为True表示该列为表的主键。 -
autoincrement
: 布尔类型,通常与primary_key
一起使用,设置为True表示该列是一个自增的主键。 -
default
: 可以为列设置一个默认值。可以是常量、变量或表达式。 -
nullable
: 布尔类型,设置为False表示该列不允许NULL值。 -
unique
: 布尔类型,设置为True表示该列的值在表中必须是唯一的。 -
index
: 布尔类型,设置为True表示该列将会被创建索引,以加快查询速度。 -
documents
: 指定列的数据类型,如db.Integer
,db.String
,db.Float
,db.Boolean
,db.DateTime
等。 -
foreign_key
: 指定列是一个外键,指向另一个表的主键。 -
comment
: 字符串类型,用来给列添加注释,这在某些数据库系统中是有用的。 -
server_ts
: 布尔类型,设置为True表示服务器会维护列的创建时间戳,通常用于审计或日志记录。 -
扩展如何编写表的存储引擎:__table_args__ = {'mysql_engine': 'InnoDB'} # 设置表的存储引擎为InnoDB
这些参数允许你精确地控制每个数据库列的行为和属性。在定义模型类时,你可以根据需要将这些参数应用到db.Column
实例上。
- 增删改查操作:通过模型实例可以进行增、删、改、查操作。
- 增加:创建模型实例并添加到会话中,然后提交会话。
new_user = User(username='new_user', email='new_user@example.com')
db.session.add(new_user)
db.session.commit()
- 删除:从会话中移除模型实例,然后提交会话。
user_to_delete = User.query.filter_by(id=1).first()
db.session.delete(user_to_delete)
db.session.commit()
- 修改:修改模型实例的属性,然后提交会话。
user = User.query.filter_by(id=1).first()
user.username = 'updated_user'
db.session.commit()
- 查询:使用查询API来获取数据。
# 获取所有用户
users = User.query.all()
# 根据条件查询用户
user = User.query.filter_by(email='user@example.com').first()
# 分页查询
users = User.query.paginate(page=1, per_page=10)
- 事务管理:在Flask-SQLAlchemy中,默认情况下,每个数据库操作都在一个事务中执行。如果需要手动控制事务,可以使用
db.session.begin()
和db.session.commit()
。
try:
# with db.session.begin(): 如果你不需要在循环中开始新的事务,那么不要调db.session.begin()。
# 执行数据库操作
pass
except Exception:
db.session.rollback() # 出现错误时回滚事务
raise
else:
db.session.commit() # 操作成功时提交事务
finally:
db.session.close() # 确保关闭会话
通过这些步骤,可以有效地利用Flask和Flask-SQLAlchemy进行数据库的CRUD操作。