flask_sqlalchemy模块使用
flask_sqlalchemy模块使用
安装
pip install flask_sqlalchemy
使用
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
//配置sqlite
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'
app.config['SQLALCHEMY_ECHO'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
//实例化SQL
db = SQLAlchemy(app)
//定义模型
class User(db.Model):
//定义表名称
__tablename__ = "user"
//定义列
id= db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(80),unique=True)
定义一列是需要使用 db.Column
的,然后需要指定数据类型,还有列的选项,常用的数据类型有:
类型名 | python类型 | 说明 | 备注 |
---|---|---|---|
Integer | int | 普通整数,一般是32位 | |
SmallInteger | int | 取值范围小的整数,一般是 16 位 | |
BigInteger | int 或 long | 不限制精度的整数 | |
Float | float | 浮点数 | |
String | str | 变长字符串 | |
Text | str | 编程字符串,对较长或不限长度的字符串做了优化 | |
Boolean | bool | 布尔值 | |
Date | datetime.date | 日期 | |
Time | datetime.time | 时间 | |
DateTime | datetime.datetime | 日期和时间 | |
LargeBinary | str | 二进制文件 |
而一些常用的 SQLAlchemy
列选项: 选项名 | 说明 |
---|---|
primary_key | 如果设为 True,这列就是表的主键 |
unique | 如果设为 True,这列不允许出现重复的值 |
index | 如果设为 True,为这列创建索引,提升查询效率 |
nullable | 如果设为 True,这列允许使用空值,如果设为 False,这列不允许使用空值 |
default | 为这列定义默认值 |
数据库操作
1、创建数据库
创建数据库要在shell里面创建
cmd >>python
>>from yourapplication import db
>>db.create_all()
数据库创建成功
2、增加数据
--增加单条数据
@app.route("/")
def index():
user = User(name="你好")
db.session.add(user)
db.session.commit()
db.session.close()
return "hello"
--增加多条数据
@app.route("/")
def index():
users =[
User(name="你好1"),
User(name="你好2"),
User(name="你好3"),
]
db.session.add_all(users)
db.session.commit()
db.session.close()
return "hello"
3、查询数据
db.session.query(class).filter_by(name="").all()
name = db.session.query(User).filter_by(name="你好").all()
//返回值为列表
--如果后面不加.all(),那么其实是不会真正到数据库执行的,类似 all 的执行器还有很多,常用的有:
方法 | 说明 |
---|---|
all | 以列表形式返回查询的所有结果 |
first | 返回查询的第一个结果,如果没有结果,则返回 None |
first_or_404 | 返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误输出 |
get | 返回指定主键对应的行,如果没有对应的行,则返回 None |
get_or_404 | 返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 错误输出 |
count | 返回查询结果的数量 |
paginate | 返回一个 Paginate 对象,它包含指定范围内的结果 |
4、删除数据
查询到数据之后再删除
db.session.query(User).filter_by(id=).delete()
db.session.commit()
db.session.close()
5、修改数据
db.session.query(User).filter_by(id=).update()
db.session.commit()
db.session.close()