文章目录
一、数据库的连接
1.flask 数据库操作和Django对比
- 一、数据库的连接
-
- 1.flask 数据库操作和Django对比
- 2.flask-sqlalchemy
- 3.pycharm安装flask-sqlalchemy
- 4.连接数据库(mysql或者sqlite3)
- 二、SQLAlchemy的操作
-
- 1.增加数据
- 2.查询数据
- 3.修改数据
- 4.删除数据
- 三、flask中将数据库方法的封装
- django 中使用ORM链接操作数据库,如果不能够用ORM 站点管理功能不能够使python使用pymysql链接操作数据库
- flask中也可以使用pymysql链接,但是需要装sqlalchemy(python的开源的ORM框架)
对sqlalchemy 进行封装
3.pycharm安装flask-sqlalchemypip install flask-sqlalchemy pip install pymysql
官方文档
http://www.pythondoc.com/flask-sqlalchemy/config.html#uri
4.连接数据库(mysql或者sqlite3)注意:连接mysql数据库需要创建库
from flask import Flask from flask_sqlalchemy import SQLAlchemy import os
app = Flask(__name__) #1.-------------------------------------链接数据库 BASE_DIR = os.path.abspath(os.path.dirname(__file__))##当前文件 项目所在的根目录 # 第一步:配置sqllite3 app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join(BASE_DIR,"test.db") # 配置mysql app.config["SQLALCHEMY_DATABASE_URI"]="mysql://root:123456@localhost/flask" # 第二步:链接sqllit3 配置 app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True ### 请求结束之后自动提交 app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True ## 跟踪修改 flask 1.x 之后增加的配置项 # 第三步:绑定 flask项目 db = SQLAlchemy(app) #2.------------------------------------ 创建模型 class UserInfo(db.Model): __tablename__ = 'userinfo' ## 表名 id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(32)) time = db.Column(db.DATETIME) #3.--------------------------------------数据迁移 db.create_all() ## 同步表结构 @app.route('/') # 路由 def index(): # 视图 return 'hello world' # 返回值 if __name__ == '__main__': # app.run()#项目启动,默认5000端口,可以自己修改
二、SQLAlchemy的操作
1.增加数据
# ---------------------单条增加 add userinfo = UserInfo(name="老王",age=19) db.session.add(userinfo) db.session.commit() #----------------------- 多条增加 add_all db.session.add_all([ UserInfo(name="老王",age=19), UserInfo(name="老王",age=19), UserInfo(name="老王",age=19), UserInfo(name="老王",age=19) ]) db.session.commit()2.查询数据
①all(),列表形式返回所有数据
data = UserInfo.query.all() print (data) #可以使用for循环 获取每个对象的值
②get()
- 返回是一个对象
- 只能通过id进行查询
- 如果没有结果 返回 None
----------------------------------------------------两种方法 data = UserInfo.query.get(1) data = UserInfo.query.get(ident=1) #效果同上
③filter 和 filter_by 过滤条件
data = UserInfo.query.filter_by(name="laowang").all() data = UserInfo.query.filter(UserInfo.name == "laowang").all() #效果同上
④first()和last()
- 返回符合条件的第一条数据和最后一条
- 返回值对象
- 如果没有数据 返回None
data = UserInfo.query.filter(UserInfo.name == "laowang").first() data = UserInfo.query.filter(UserInfo.name == "laowang").last()
⑤order_by 排序
# -----------------------------升序 data = UserInfo.query.order_by(UserInfo.id).all() data =UserInfo.query.order_by("id").all() # 效果同上 #------------------------- 降序 data = UserInfo.query.order_by(UserInfo.id.desc()).all() data =UserInfo.query.order_by(db.desc("id")).all() # 效果同上
⑥分页limit()和偏移offset()
## sql select * from userinfo limit 2,3; 2代表从哪里开始 3 取多少条 data = UserInfo.query.offset(2).limit(2).all()3.修改数据
#先查询数据 data = UserInfo.query.filter(UserInfo.id==1).first() data.name = "lisi" db.session.merge(data) db.session.commit()4.删除数据
#----------------单条删除delete data = UserInfo.query.filter().first() db.session.delete(data) db.session.commit() #----------------多条筛选删除 data = UserInfo.query.filter(UserInfo.id == 2).delete() db.session.commit()三、flask中将数据库方法的封装
为了让其具备类似Django的save和update和delete方法,我们给其封装
class BaseModel(db.Model): ## __abstract__ = True # 声明当前类为抽象类,被继承 调用不会被创建 id = db.Column(db.Integer,primary_key=True) def save(self): db.session.add(self) db.session.commit() def merge(self): db.session.merge(self) db.session.commit() def delete(self): db.session.delete(self) db.session.commit()
使用,注意要重新继承重写的类
使用增删改
# userinfo = UserInfo(name="awu",age=19) # 增加数据 userinfo.save() # 更新数据 userinfo = UserInfo.query.get(8) userinfo.name="aliu" userinfo.merge() # 删除数据 userinfo = UserInfo.query.get(8) userinfo.delete()
