对sqlalchemy 进行封装
pip install flask-sqlalchemy
pip install pymysql
官方文档
http://www.pythondoc.com/flask-sqlalchemy/config.html#uri
注意:连接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端口,可以自己修改
# ---------------------单条增加 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()
①all(),列表形式返回所有数据
data = UserInfo.query.all()
print (data)
#可以使用for循环 获取每个对象的值
②get()
----------------------------------------------------两种方法
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()
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()
#先查询数据
data = UserInfo.query.filter(UserInfo.id==1).first()
data.name = "lisi"
db.session.merge(data)
db.session.commit()
#----------------单条删除delete
data = UserInfo.query.filter().first()
db.session.delete(data)
db.session.commit()
#----------------多条筛选删除
data = UserInfo.query.filter(UserInfo.id == 2).delete()
db.session.commit()
为了让其具备类似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()