flask---flask_sqlalchemy操作数据库基本操作

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)
创建数据库模型

models.py

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 对象,它包含指定范围内的结果

猜你喜欢

转载自blog.csdn.net/weixin_43919632/article/details/97174319