flask中使用SQLAlchemy,基本操作数据库(常用)
碧羽墨轩 2023-03-29【学无止境】93人已围观
简介 SQLAlchemy是用Python编程语言开发的一个开源项目。它提供了SQL工具包和ORM(对象关系映射)工具,使用MIT许可证发行。 SQLAlchemy最初在2006年2月发行,发行后便很快的成为Python社区中最广泛使用的ORM工具之一,丝毫不亚于Django自带的ORM框架。 SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。它的理念是,SQL数据库的量级和性能比对象集合重要,而对象集合的抽象又重要于表和行。
1.安装sqlachemy
pip3 install sqlalchemy pip3 install pymysql
2.连接数据库
# 作者:zhangfuxiang
# 时间:2023/3/26 21:26
HOSTNAME = '服务器地址'
PORT = 3306
DATABASE = '数据库名称'
USERNAME = '用户名'
PASSWORD = '密码'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
3.app引入配置
app.config.from_object(config) db.init_app(app)
4.基本用法
# 查询所有⽤户数据
user_list=Wdtest.query.all()
# 查询有多少个⽤户
user_list_num=Wdtest.query.count()
# 查询第1个⽤户
user=Wdtest.query.first()
# 查询id为3的⽤户[3种⽅式]
user=Wdtest.query.get(3) # 根据主键查询
user_list=Wdtest.query.filter_by(id=3).all() # 以关键字实参形式进行匹配字段
user_list=Wdtest.query.filter(Wdtest.id == 3).all() # 以恒等式形式匹配字段
# 查询名字结尾字符为g的所有⽤户
Wdtest.query.filter(Wdtest.name.endswith('g')).all()
# 查询名字包含‘wa'的所有项目
user_list=Wdtest.query.filter(Wdtest.name.contains('wa')).all()
# 模糊查询
user_list =Wdtest.query.filter(Wdtest.name.like('%a%')).all()
# 查询名字wa开头和age为20的所有⽤户[2种⽅式]
user_list=Wdtest.query.filter(Wdtest.name.startswith('wa'),Wdtest.age == 20).all()
user_list=Wdtest.query.filter(and_(Wdtest.name.startswith('wa'), Wdtest.age == 20)).all()
# 非条件查询查询名字不等于wade的所有⽤户[2种⽅式]
user_list=Wdtest.query.filter(not_(Wdtest.name == 'wade')).all()
user_list=Wdtest.query.filter(Wdtest.name != 'wade').all()
# in 条件查询
user_list=Wdtest.query.filter(Wdtest.id.in_(['97124f50-0208-11ea-a66c-04ea56212bdf', '3'])).all()
# 所有⽤户先按年龄从⼩到⼤, 再按id从⼤到⼩排序, 取前5个
user_list=Wdtest.query.order_by(Wdtest.age,Wdtest.id.desc()).limit(5).all()
#分页查询
#获取页数
page = request.args.get('page',1)
paginate = Article.query.paginate(page=int(page),per_page=3)
paginate() 方法的返回值是一个 Pagination 类对象,这个类在 Flask-SQLAlchemy 中定义。 这个对象包含很多属性,用于在模板中生成分页链接,因此将其作为参数传入了模板。分页对象的属性简介如表所示。
#paginate 属性:
# print(paginate.pages) #总共能生成多少页
# print(paginate.page) #当前页码数
# print(paginate.has_next) #True
# print(paginate.has_prev) #Flase
# print(paginate.next_num) #获取下一页的页码数
# print(paginate.prev_num) #获取上一页的页码数
# print(paginate.items) #获当前页的对象 列表
#html模版中使用分页
{% for i in range(1, paginate.pages + 1) %}
{% if i == paginate.page %}
<a class="page-num page-num-active" href="/?p={{ i }}">{{ i }}</a>
{% else %}
<a class="page-num" href="/?p={{ i }}">{{ i }}</a>
{% endif%}
{% endfor %}
文章评论
总共 0 条评论
这篇文章还没有收到评论,赶紧来抢沙发吧~