flask-SQLAlchemy笔记

SqlAlchemy ORM
新建模型
models.py
import os

#设置数据库URI
app.config['SQLALCHEMY_DATABASE_URI']=os.getenv('DATABASE_URL','mysql+pymysql://root:000000@localhost:3306/test')

db = SQLAlchemy(app)


安装并初始化Flask-SQLAlchemy后,启动程序时会看到命令行下有
一行警告信息。这是因为Flask-SQLAlchemy建议你设置
SQLALCHEMY_TRACK_MODIFICATIONS配置变量,这个配置变量决
定是否追踪对象的修改,这用于Flask-SQLAlchemy的事件通知系统。这
个配置键的默认值为None,如果没有特殊需要,我们可以把它设为
False来关闭警告信息:

class Note(db.Model):#创建一个模型类
id = db.Column(db.Integer,primary_key=True)
body = db.Column(db.Text)
db.create_all()#创建一个表
db.drop_all()#删除一个表

字段属性:
Integer 整数
String 字符串,可选参数length来设置长度
Text 较长的Unicode文本
Date 日期,存储python的datetime.date对象
Time 时间,存储python的datetime.time对象
Datetime 日期和时间,存储python的datetime对象
Interval 时间间隔,存储python的datetime.timedelta对象
Float 浮点数
Boolean 布尔值
PickleType 存储Pickle列化的Python对象
LargeBinary 存储任意二进制数据
注意:
一般情况下字段的长度有程序设计者自定的,但是姓名的长度一般不超过70个字符,中文名一般不超过20个字符,电子邮件地址的长度一般不超过254个字符,

常用的SQLAlchemy字段参数:

primary_key ,True代表该字段为主见==主键
unique,True代表不允许出现重复值
index,True代表为该字段创建索引,以提高查询效率
nullable,确定字段值可否为空,值为True或False,默认True
default,为字段设置默认值


创建数据库和表

db.create_all()#创建表
db.drop_all()#删除数据库和表
db.session.add()#增加记录
db.session.commit()#提交会话


CRUD:
Flask-SqlAlchemy>=2.30版本的话自动为模型类生成一个__repr__(),__repr__()方法会返回一条类似
<模型类名主键值>的字符串,比如<Note2>

class Note(db.Model):
...
def __repr__(self):
return '<Note %r>' % self.body


<模型类>.query.<过滤方法>.<查询方法>

常用的SqlAlchemy查询方法

all()返回所有查询到的记录
first()返回查询的第一条记录,如果未找到,则返回None
one()返回第一条记录,且仅允许有一条记录,如果记录大于1或者小于1,则抛出错误。

get(ident)传入主键作为参数,返回指定主键值的记录,如果想未找到,则返回None
count()返回查询结果的数量
one_or_none()类似one(),结果数量不为1,返回None
first_or_404()返回查询的第一条记录,如果未找到,则返回404错误响应
get_or_404(ident) 传入主键作为参数,返回指定主键值的记录,如果未找到,则返回404错误响应
paginate() 返回一个Pagination对象,可以对记录进行分页处理。
with_parent(instance)传入模型示例作为参数,返回和这个示例相关联的对象


Note.query.all()
note1 = Note.query.first() #返回第一条记录
note1.body #返回body字段的内容
Note.query.get(2)#返回主键值id字段的记录
Note.query.count()#返回记录的对象

常用的SQLAlchemy过滤方法
filter() 使用指定的规则过滤记录,返回新的查询对象。
filter_by()使用指定的规则过滤记录(以关键字表达的形式),返回新产生的查询对象#类似where
order_by()根据条件对记录进行排序,返回产生的新的查询对象
limit(limit)使用指定的值限制原查询返回的记录数量,返回新产生的查询对象
group_by()根据指定条件对记录进行分组,返回新产生的查询对象。
offset(offset) 使用指定的值偏移元查询的结果,返回产生新的查询对象。

filter()方法是最基础的查询方法,他使用指定的规则过滤记录,
它和filter_by()的差别在于它内部需要写 类名.字段值,而filter_by只写字段值就好了。
Note.query.filter(Note.body="shave").first()
Note.query.filter_by(body="shave")

查看对应的Sql语句则直接打印即可。

猜你喜欢

转载自www.cnblogs.com/wxzbk/p/10508272.html