时间: 2023-03-29 【学无止境】 阅读量:共603人围观
简介 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() # 多条件查询,添加判断条件,当值存在时才加这个条件 paginate = Article.query.filter(Article.type_name == typename, ( Article.group_names.like('%' + groupNames + '%')) if groupNames else 1 == 1).order_by( Article.gmt_create.desc()).paginate(page=p, per_page=page_size) #分页查询 #获取页数 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 %}