python Flask 操作数据库(2)
单表操作
数据准备
from flask import Flask
from flask_sqlalchemy import SQLAlchemy class Config:
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo"
SQLALCHEMY_TRACK_MODIFICATIONS = False app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app) # 模型类 -》对一个表设计
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
age = db.Column(db.Integer) @app.route("/", methods=["GET", "POST"])
def index():
return "成功!"
if __name__ == '__main__':
db.create_all()
app.run()
添加记录
user = User(name="laowang", age=18)
db.session.add(user) # 逻辑添加
db.session.commit()
删除记录
# res = User.query.filter_by(name="laowang").first()
# db.session.delete(res)
# db.session.commit()
修改记录
res = User.query.filter_by(id=3).first()
res.name="老色批"
db.session.commit()
查询记录
SQLAlchemy中关于查询分为两部分:一个是查询过滤器,一个是查询执行器。
常用的SQLAlchemy查询过滤器
| 过滤器 | 说明 |
|---|---|
| filter() | 把过滤器添加到原查询上,返回一个新查询 |
| filter_by() | 把等值过滤器添加到原查询上,返回一个新查询 |
| limit | 使用指定的值限定原查询返回的结果 |
| offset() | 偏移原查询返回的结果,返回一个新查询 |
| order_by() | 根据指定条件对原查询结果进行排序,返回一个新查询 |
| group_by() | 根据指定条件对原查询结果进行分组,返回一个新查询 |
常用的SQLAlchemy查询执行器
| 方法 | 说明 |
|---|---|
| all() | 以列表形式返回查询的所有结果 |
| first() | 返回查询的第一个结果,如果未查到,返回None |
| first_or_404() | 返回查询的第一个结果,如果未查到,返回404 |
| get() | 返回指定主键对应的行,如不存在,返回None |
| get_or_404() | 返回指定主键对应的行,如不存在,返回404 |
| count() | 返回查询结果的数量 |
| paginate() | 返回一个Paginate对象,它包含指定范围内的结果 |
演示
@app.route("/select_book")
def select_book():
# 1.查询所有用户数据
# res = Books.query.all()
# 说明:因为这里不想条件筛选,所以不需要查询过滤器
#
# # 2.查询有多少个用户
# res = Books.query.count()
# 3.查询第1个用户
res = Books.query.first()
# # # 4.查询id为4的用户[3种方式]
# res = Books.query.get(1) # 使用这种方式,后面只需要填写id值
# res = Books.query.filter_by(id=4).first()
res = Books.query.filter(Books.id == 1).first()
"""
filter_by和filter的区别
格式:
filter_by: 属性=
filter: 对象.属性==
功能:
filter功能上更加强大,可以实现更多的查询方式,比如比较运算符
"""
print(res)
return "查询成功"
一对多表操作
代码准备:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy class Config:
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo"
SQLALCHEMY_TRACK_MODIFICATIONS = False app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app) class Publishers(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
address = db.Column(db.String(64)) def _str_(self): # print显示内容做设置
return self.name def _repr__(self): # 对列表中显示内容做设置
return self.name class Book(db.Model):
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(64))
price =db.Column(db.Integer)
pub_id = db.Column(db.Integer,
db.ForeignKey("publishers.id")
)
def _str_(self): # print显示内容做设置
return self.title def _repr__(self): # 对列表中显示内容做设置
return self.title
@app.route('/',methods=["GET","POST"])
def hello_world():
return "成功"
if __name__ == '__main__':
db.create_all()
app.run()
添加数据
books=Book(id=1,title="养鬼为祸",price=50,pub_id=1)
db.session.add(books) # 逻辑添加
db.session.commit()
删除数据
es = Book.query.filter(Book.id == 1).first()
db.session.delete(es)
db.session.commit()
修改数据
es =Book.query.filter_by(id=1).first()
es.title="西游记"
db.session.commit()
查找数据
es =Publishers.query.filter(Publishers.name == "南方出版社").first()
ls = Book.query.filter(Book.pub_id == es.id).all()
print(ls)
没毛病!
python Flask 操作数据库(2)的更多相关文章
- Python——Flask框架——数据库
一.数据库框架 Flask-SQLAlchemy (1)安装: pip install flask-sqlalchemy (2)Flask-SQLAlchemy数据库URL 数据库引擎 URL MyS ...
- flask 操作数据库(分类)
数据库 数据库是大多数动态web程序的基础设施,只要你想把数据存下来,就离不开数据库. 这里所说的数据库指的是有存储数据的单个或多个文件组成的集合,它是一种容器,可以类比文文件柜.而人们通常使用数据库 ...
- MySQL---连接器(python如何操作数据库媒介,基于python语言)
MySQL — 连接器 连接器的概念 它们往往是一类Python包,或者是一类已经写好的Python库.这些库提供了我们Python去连接数据库服务器的基本功能. 既然它是一个包,那么我们首先学会 ...
- Python:操作数据库
(一) 前言 本文说明如何连接Oracle.MySQL.sqlserver,以及执行sql.获取查询结果等. (二) DB-API DB-API阐明一系列所需对象和数据库 ...
- Python连接操作数据库
步骤: 1.创建与数据库的连接对象: 2.创建游标: 3.通过游标执行语句 4.增删改需要提交(commit)数据 5.关闭连接 如: import MySQLdb # Python通过MySQL ...
- python中操作数据库
python中要操作数据库,要使用该数据库在python中对应的驱动库,本文介绍python操作mysql数据库 1.首先安装pymysql 2.导入库 3.建立连接 4.建立游标 5.发起请求 6. ...
- python 连接操作数据库(二)
一.我们接着上期的博客继续对ORM框架进行补充,顺便把paramiko模块也给大家讲解一下: 1.ORM框架: 在连接操作数据库的第一个博客中也已经说了,sqlalchemy是一个ORM框架,总结就是 ...
- python 多线程操作数据库
如果使用多线程操作数据库,容易引起多用户操作锁表 OperationalError: (2013, 'Lost connection to MySQL server during query') 使用 ...
- python 连接操作数据库(一)
一.下面我们所说的就是连接mysql的应用: 1.其实在python中连接操作mysql的模块有多个,在这里我只给大家演示pymysql这一个模块(其实我是感觉它比较好用而已): pymysql是第三 ...
- python redis操作数据库方法
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
随机推荐
- 独辟蹊径:逆推Krpano切图算法,实现在浏览器切多层级瓦片图
前言 此文我首发于CSDN(所以里面的图片有它的水印) 趁着隔离梳理一下之前做的一个有用的功能:在浏览器中去切割多分辨率瓦片图 这是一个有趣的过程,跟我一起探索吧 阅读本文需具备前置知识:对krpan ...
- Java程序设计(二)作业
题目1:输入一个三位十进制数,对其每一位进行筛选,逆序组合后输出. package test; import java.util.*; public class test2{ public stati ...
- 关于VirtualBox在新建虚拟机时-选择操作系统类型后没有64位的版本选项
今天笔者准备使用VirtualBox安装一台windows的虚拟时,在选项操作系统类型为Microsoft Windows后 发现下面的版本选择中,没有之前看到的64位选择,全是32位的,但实际昨天都 ...
- OnionArch - 如何实现更新指定字段的通用Handler
博主最近失业在家,找工作之余,自己动手写了个洋葱架构(整洁架构)解决方案,以总结和整理以前的项目经验,起名叫OnionArch,其目的是为了更好的实现采用DDD(领域驱动分析)和命令查询职责分离(CQ ...
- Netty 学习(十):ChannelPipeline源码说明
Netty 学习(十):ChannelPipeline源码说明 作者: Grey 原文地址: 博客园:Netty 学习(十):ChannelPipeline源码说明 CSDN:Netty 学习(十): ...
- Java 集合简介 一
什么是集合? 集合就是由若干个确定的元素所构成的整体.例如,5只小兔构成的集合: 在数学中,我们经常遇到集合的概念.例如: ● 有限集合 ○ 一个班所有的同学构成的集合: ○ 一个网站所有的商品构成的 ...
- JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
1.线程和进程 进程:一个程序,微信.qq...程序的集合.(一个进程包含多个线程,至少包含一个线程.java默认有两个线程:主线程(main).垃圾回收线程(GC) 线程:runnable.thre ...
- 知识图谱顶会论文(ACL-2022) PKGC:预训练模型是否有利于KGC?可靠的评估和合理的方法
PKGC:预训练模型是否有利于KGC?可靠的评估和合理的方法 论文地址:Do Pre-trained Models Benefit Knowledge Graph Completion? A Reli ...
- vue3学习记录(新特性)
总概 1) 性能提升 打包大小减少 41% 初次渲染快 55%,更新渲染快 133% 内存减少 54% 使用 Proxy 代替 defineProperty 实现数据响应式 重写虚拟 DOM 的实现和 ...
- 前端性能优化——首屏时间&&白屏时间
1.首屏时间概念 首屏时间是指用户打开一个网站时,直到浏览器首页面内容渲染完成的时间. 2.白屏时间概念 白屏时间即是,浏览器开始显示内容的时间,所以我们一般认为解析完<head>的时刻, ...