pip3 install flask-sqlalchemy pip3 intall pymysql
import pymysql from flask_sqlalchemy import SQLAlchemy
# 语法:app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:passwd@hostname[:port]/dbname?charset=utf8' app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:mysql@127.0.0.1:3306/myflask?charset=utf8'
app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = Ture app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)
class 类名(db.Model): #声明表名,若是不指定,则默认表名为小写类名
__tablename__ = '表名'
#创建字段函数
字段名 = db.Column(字段类型,[参数]...) ... 例: class Students(db.Model):
'''学生表''' __tablename__ = 'stu' #默认表名为小写的类名即students,但能够经过__tablename__属性来设定
id = db.Column(db.Integer,primary_key=True,nullable=False) #主键默认自增,因此不须要再设置auto_increment参数
name = db.Column(db.String(20),nullable=False) age = db.Column(db.Integer) isDelete = db.Column(db.Boolean,nullable=False,default=False) class Subjects(db.Model):
'''学科表''' id = db.Column(db.Integer,primary_key=True,nullable=False) title = db.Column(db.String(20),unique=True,nullable=False) class Scores(db.Model):
'''成绩表''' id = db.Column(db.Integer,primary_key=True,nullable=False) stu_id = db.Column(db.ForeignKey(Students.id),nullable=False) # 外键 sub_id = db.Column(db.ForeignKey(Subjects.id),nullable=False) score = db.Column(db.Integer,nullable=False)
字段类型 | 说明 |
Integer | 常规整型,一般为32位 |
SmallInteger | 短整型,一般为16位 |
BigInteger | 精度不受限整型 |
Float | 浮点型 |
Numeric | 小数 |
String | 可变长度字符串 |
Text | 可变长度字符串,适合大量文本 |
Unicode | 可变长度Unicode字符串 |
Boolean | 布尔类型 |
Date | 日期类型 |
Time | 时间类型 |
DateTime | 日期时间类型 |
Interval | 时间间隔,至关于datetime.timedelta |
Enum | 字符列表 |
PickleType | 自动Pickle序列化 |
LargeBinary | 二进制 |
参数 | 说明 |
autoincrement | 是否自增(True/False) |
primary_key | 是否主键 |
index | 是否创建索引 |
unique | 是否惟一 |
nullable | 是否容许为null |
default | 设置默认值 |
db.ForeignKey(模型类名.id) | 建立外键约束 |
laowang = Students(name='老王',age=30) laozhang = Students(name='老张',age=35) db.session.add(laowang) db.session.add(laozhang) # db.session.add_all([laowang,laozhang]) 一次性添加包含全部记录对象的列表
db.session.commit()
<模型类>.query.<过滤方法>.<查询方法>
filter():使用指定的规则过滤记录
filter_by():使用指定的规则过滤记录(关键字表达式的形式)
order_by():根据指定条件对记录进行排序
limit():限制查询的条数
group_by():根据指定条件对记录进行分组
off_set():使用指定的值偏移原查询的结果
all(): 返回全部包含查询记录的列表
first(): 返回查询的第一条记录,未查到则返回None
one(): 返回第一条记录,有且仅有一条记录,不然报错
get(id): 返回指定主键值的记录,未查到则返回None
count(): 返回查询结果的数量
one_or_none(): 有且仅有一条记录,返回记录,不然返回None
first_or_404(): 返回查询的第一条记录,未查到则报404错误
get_or_404(id): 返回指定主键值的记录,未查到则报404错误
paginate(): 返回一个Pagination对象,能够对记录进行分页处理
with_parent(类实例): 返回和这个实例相关联的对象
from sqlalchemy import and_,or_,not_
Students.query.all() #查询全部 包含全部记录的列表
Students.query.filter_by(name='老张').first()#条件查询,精确查询
Students.query.filter(Students.name.endwith('王')).all()# 模糊查询,返回名字以'王'结尾的全部数据。 Students.query.filter(Students.name!='老王').all()#逻辑非
Students.query.filter(not_(Students.name=='老王')).all()#取反
Students.query.filter(and_(Students.name=='老王',Students.age=20)).all() #逻辑与
Students.query.filter(or_(Students.name=='老王',Students.age==30)).all() #逻辑或
Students.query.order_by(Students.age).all()#排序查询
Students.query.limit(1).all()#查询1条
Students.query.get(id = 1)#精确查询
stu = Students.query.first() stu.name = '老李' db.session.commit()
laowang = Students.query.filter_by(name='老王').first() db.session.delete(laowang) db.session.commit()