使用falsk快速搭建自己的本地仓库
程序员文章站
2022-06-17 10:55:19
...
1.创建模型
class MODLENAME(db.Model):
__tablename__=TABLENAME
COLUMN_NAME=db.Column(db.TYPE,OPTIONS)
MODELNAME : 模型名称
TABLENAME : 对应的表名
COLUMN_NAME : 对应的列名
TYPE : 列类型
OPTIONS : 列选项
TYPE:
Integer,SmallInteger,BigInteger,BooleanFloat,Numeric
String,Text,Unicode,UnicodeText,Date,Time,DateTime
OPTIONS:
primary_key : True or False
unique : True or False
index : True or False
nullable : True or False
默认是允许为空(True)
default : 定义默认值
2.数据库操作
1.插入
db.session.add(Models对象)
db.session.commit()
自动提交:
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
2.查询
**1.基于 db.session 查询**
1.db.session.query()
查询基础,返回查询对象
2.查询执行函数
目的:用于得到最终的结果
all() , first() , first_or_404() , count()
3.查询过滤器函数
目的:在基础查询后增加筛选条件
1.filter()
注意:必须使用 实体类.属性 做筛选
1.db.session.query(Models).filter(Models.column > num).all()
2.db.session.query(Models).filter(Models.col1>num1,Models.col2>num2)
3.db.session.query(Models).filter(or_(条件1,条件2)).all()
4.db.session.query(Models).filter(Models.column.like('%w%')).all()
5.db.session.query(Models).filter(Models.column.in_(['','',''])).all()
6.聚合
db.session.query(func.聚合函数(Models.Column).label('别名'))
聚合函数:
sum() : 求和
count() : 求数量
max()
min()
avg()
2.filter_by()
3.limit()
4.order_by()
5.group_by()
**2.基于Models进行查询
Models.query.查询过滤器**函数(条件参数).查询执行函数()
3.删除
1.查询出要删除的实体对象
u=db.session.query(Models).filter_by(xxx).first()
2.根据提供的 删除方法进行删除
db.session.delete(u)
注意:
真正的删除并不是通过删除操作完成,而是通过修改完成的
4.修改
1.查
将 要修改的信息查询出来
2.改
实体对象.属性 = 值
3.保存
db.session.add(实体对象)
建库应用示例:
from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb()
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:[email protected]:3306/flask"
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
db = SQLAlchemy(app)
# db.init_app(app)
class Course(db.Model):
__tablename__ = "course"
id = db.Column(db.Integer,primary_key=True)
cname = db.Column(db.String(30))
#增加关联属性和反向引用关系
#关联属性:在course对象中通过哪个属性能够得到对应的所有的teacher
#反向引用关系:在teacher对象中通过哪个属性能找到它对应的course
teachers = db.relationship('Teacher',backref='course',lazy="dynamic")
def __init__(self,cname):
self.cname = cname
def __repr__(self):
return "<Course:%r>" % self.cname
class Teacher(db.Model):
__tablename__ = 'teacher'
id = db.Column(db.Integer,primary_key=True)
tname = db.Column(db.String(30))
tage = db.Column(db.Integer)
#增加一列:course_id,外键列,引用自主键表(course)的主键列(id)
course_id = db.Column(db.Integer,db.ForeignKey('course.id'))
#增加关联属性以及反响引用属性
wife = db.relationship('Wife',backref='teacher',uselist=False)
def __repr__(self):
return "<Teacher:%r>" % self.tname
class Wife(db.Model):
id=db.Column(db.Integer,primary_key=True)
wname=db.Column(db.String(30))
wage=db.Column(db.Integer)
#增加一个列(外键):表示引用自Teacher表的主键
teacher_id = db.Column(db.Integer,db.ForeignKey('teacher.id'))
def __init__(self,wname,wage):
self.wname = wname
self.wage = wage
def __repr__(self):
return "<Wife:%r>" % self.wname