flask_sqlalchemy操作数据库
更多内容参考:
https://www.jianshu.com/p/0c88017f9b46
一些关键字的理解:
primary_key =True 设置主键
autoincrement=True 自动递增
nullable=True 允许为空
default =datetime.now 获取每次执行这语句的当前时间
datatime.now() 只获取第一次运行的时间
relationship 构建与对象的关联关系,关联是双向的
ForeignKey 外键,是其他表的主键,通过这个查找其他表的数据
连接数据库的代码:
在config.py中
这些是固定的,SQLALCHEMY_DATABASE_URI SQLALCHEMY_TRACK_MODIFICATTIONS

class Config(object):
#数据库格式 dialect+driver://username:password@host:port/database
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/flask-blog'
SQLALCHEMY_TRACK_MODIFICATIONS =False
#构建web应用app与数据库的联系
db = SQLAlchemy(app)
创建数据库模型
from app import db
#数据库模型,继承至db.Model这个实现 与数据库中的表的映射
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True,autoincrement=True)
telephone= db.Column(db.String(11), index=True, unique=True)
email = db.Column(db.String(20), index=True, unique=True)
password= db.Column(db.String(128))
ORM对象关系映射
面向对象概念 | 面向关系概念 |
---|---|
类 | 表 |
对象 | 一条记录 |
属性 | 字段 |
创建表或删除表
#创建数据库
db.create_all()
#删除库
db.drop_all()
添加数据到数据库
类别1
from db.MysqlTool import db
from db.MysqModel import User,Role
#添加数据
admin_role = Role(role_name = 'Amdmin')
mod_role = Role(role_name = 'Moderator')
user_role = Role(role_name = 'User')
user_john = User(user_name = 'john',role = admin_role)
user_susan = User(user_name='susan', role=user_role)
user_david = User(user_name='david', role=user_role)
db.session.add_all([admin_role, mod_role, user_role,
user_john, user_susan, user_david])
#提交事务
db.session.commit()
类别2:
User指数据库模型名
# 获取表单数据
telephone = request.form.get("telephone")
email = request.form.get("email")
password1 = request.form.get("password1")
password2 = request.form.get("password2")
# 添加到数据库
user = User(telephone=telephone, email=email, password=password1)
#先添加到缓存中
db.session.add(user)
#提交到数据库
db.session.commit()
修改数据到数据库
from db.MysqlTool import db
from db.MysqModel import User,Role
#根据条件查询一行数据
admin_role = User.query.filter(user_name = 'hahah').first()
#修改数据-
admin_role.role_name = 'new username'
#添加缓存
db.session.add(admin_role)
#提交
db.session.commit()
删除数据库中数据
from db.MysqlTool import db
from db.MysqModel import User,Role
#根据条件查询一行数据
admin_role = User.query.filter(role_name = 'hahah').first()
#删除
db.session.delete(admin_role)
#提交
db.session.commit()
查询数据示例
from db.MysqlTool import db
from db.MysqModel import User,Role
#带条件查询,first()表示获取所查数据第一条
user_role = User.query.filter(role_name = 'User').first()
#查询所有
print (Role.query.all())
过滤器说明
query对象上操作的常用过滤器:
filter()
把过滤器添加到原查询上,返回一个新查询
filter_by()
把等值过滤器添加到原查询上,返回一个新查询
limit()
使用指定的值限制原查询返回的结果数量,返回一个新查询
offset()
偏移原查询返回的结果,返回一个新查询
order_by()
根据指定条件对原查询结果进行排序,返回一个新查询
group_by()
根据指定条件对原查询结果进行分组,返回一个新查询
常用查询执行函数方法说明
all()
以列表形式返回查询的所有结果
first()
返回查询的第一个结果,如果没有结果,则返回 None
first_or_404()
返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误响应
get()
返回指定主键对应的行,如果没有对应的行,则返回 None
get_or_404()
返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 错误响应
count()
返回查询结果的数量
paginate()
返回一个 Paginate 对象,它包含指定范围内的结果