您当前的位置: 首页 >  sql

Flask(7):Flask中的SQLAlchemy的使用

发布时间:2019-10-15 22:10:18 ,浏览量:5

文章目录
  • 一、数据库的连接
    • 1.flask 数据库操作和Django对比
    • 2.flask-sqlalchemy
    • 3.pycharm安装flask-sqlalchemy
    • 4.连接数据库(mysql或者sqlite3)
  • 二、SQLAlchemy的操作
    • 1.增加数据
    • 2.查询数据
    • 3.修改数据
    • 4.删除数据
  • 三、flask中将数据库方法的封装
一、数据库的连接 1.flask 数据库操作和Django对比
  • django 中使用ORM链接操作数据库,如果不能够用ORM 站点管理功能不能够使python使用pymysql链接操作数据库
  • flask中也可以使用pymysql链接,但是需要装sqlalchemy(python的开源的ORM框架)
2.flask-sqlalchemy

对sqlalchemy 进行封装

3.pycharm安装flask-sqlalchemy
pip 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() 
关注
打赏
1688896170
查看更多评论

暂无认证

  • 5浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1612s