from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# mysql数据库连接:mysql://username:password@localhost:3306/flask
# sqlite数据库:sqlite:///path/sqlite3
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:huyu1680456489@localhost/flask"
# 追踪对象的修改,用于Flask-SQLAlchemy通知系统,不加会出现警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
@app.route('/')
def hello_world():
return 'Hello World!'
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(36), unique=True, nullable=False, )
email = db.Column(db.String(255), unique=True, nullable=False)
def __repr__(self):
return self.username
db.create_all() # 建立表
if __name__ == '__main__':
app.run()
模型
类型名 | Python类型 | 说明 |
---|---|---|
Integer | int | 普通整数,一般是 32 位 |
SmallInteger | int | 取值范围小的整数,一般是 16 位 |
Big Integer | int 或 long | 不限制精度的整数 |
Float | float | 浮点数 |
Numeric | decimal.Decimal | 定点数 |
String | str | 变长字符串 |
Text | str | 变长字符串,对较长或不限长度的字符串做了优化 |
Unicode | unicode | 变长 Unicode 字符串 |
Unicode Text | unicode | 变长 Unicode 字符串,对较长或不限长度的字符串做了优化 |
Boolean | bool | 布尔值 |
Date | datetime.date | 日期 |
Time | datetime.time | 时间 |
DateTime | datetime.datetime | 日期和时间 |
Interval | datetime.timedelta | 时间间隔 |
Enum | str | 一组字符串 |
PickleType | 任何 Python 对象 | 自动使用 Pickle 序列化 |
LargeBinary | str | 二进制文件 |
常用 SQLAlchemy 列选项
选项名 | 说明 |
---|---|
primary_key | 如果设为 True,这列就是表的主键 |
unique | 如果设为 True,这列不允许出现重复的值 |
index | 如果设为 True,为这列创建索引,提升查询效率 |
nullable | 如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值 |
default | 为这列定义默认值 |
一些既定的约束标准:
姓名(英文)一般 70字符
中文一般不超过20字符
电子邮件一般不超过254字符
用户名一般不超过36字符
可以通过以下代码查看建表语句
from sqlalchemy.schema import CreateTable
print(CreateTable(User.__table__))
CURD操作
1.create
>>> from app import db, User
>>> user1 = User(username='小明', email='123456@qq.com')
>>> user2 = User(username='小红', email='456789@qq.com')
>>> db.session.add(user1)
>>> db.session.add(user2)
>>> db.session.commit()
除了使用add()添加数据,还可以使用add_all()一次添加多条数据
2.read
一般来说,一次完整的查询如下:
<模型类>.query.<过滤方法>.<查询方法>
SQLAlchemy常用查询方法
查询方法 | 说明 |
all() | 返回查询所有内容 |
first() | 返回查询到的第一条数据,找不到返回None |
one() | 返回第一条数据,且仅允许有1条数据。如果记录数量大于小于1,都报错 |
get(ident) | 传入主键作为参数,返回指定主键的记录,找不到返回None |
count() | 返回查询结果数量 |
one_or_none() | 类似one(),结果数量不为1,返回None |
first_or_404() | 返回查询的第一条记录,找不到返回404 |
get_or_404(ident) | 传入主键作为参数,找不到数据返回404 |
paginate() | 返回一个Paginate对象,对数据进行分页 |
with_parent(instance) | 传入模型类实例作为参数,返回和这个实例相关联的对象 |
users = User.query.all()
first_user = User.query.first()
user = User.query.get(1)
print(users, type(users), first_user, user) # [小明, 小红] <class 'list'> 小明 小明
过滤方法:
查询过滤器名称 | 说 明 |
filter() | 使用指定的规则过滤记录,返回新产生的查询对象 |
filter_by() | 以关键字表达式过滤记录 |
order_by() | 以指定对象对记录排序,产生新对象 |
limit() | 使用指定值,限制查询返回的数量 |
group_by() | 根据指定的条件对记录进行分组 |
offset() |
使用指定的值偏移原查询结果 |
3.Update
>>> user = User.query.get(2)
>>> user.email = '666@qq.com'
>>> db.session.commit()
4.Delete
>>> user = User.query.get(2)
>>> db.session.delete(user)
>>> db.session.commit()
Flask数据迁移
使用如下命令安装工具包:
pip install flask-migrate
在app中配置
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:huyu1680456489@localhost/flask"
# 追踪对象的修改,用于Flask-SQLAlchemy通知系统,不加会出现警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# 迁移操作
migrate = Migrate(app, db)
one:创建迁移环境
命令:flask db init
该命令会在app下创建一个migrate目录,包含自动生成的配置文件和迁移版本文件夹
two:生成迁移脚本(此步骤,可以自动在数据库创建表)
命令:flask db migrate -m "add table"
-m选项为迁移备注信息
three:更新数据库
命令:flask db upgrade
该命令会更新修改的字段,在没有数据库时会自动创建数据库
评论列表
已有0条评论