flask-sqlalchemy介绍
flask-sqlalchemy是一个Flask的扩展插件。它为你的应用程序添加了SQLAlchemy的支持。它的目标是通过提供有用的默认值和额外的帮助来简化SQLAlchemy与Flask的使用,使其更容易完成常见任务。
安装
pip install flask-sqlalchemy
简单使用
通常我们会先实例化一个SQLAlchemy的db对象,将该对象注册到app中 通过继承db.Model来设计数据模型类。
# app/__init__.py
from flask import Flask
from app.extendstions import db
def create_app():
app = Flask(__name__)
db.init_app(app)
db.create_all(app=app) # 创建数据表
return app
# extendstions.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# models.py
from app.extendstions import db
class User(db.Model):
__tablename__ = "users" # 定义表名,不写为模型类的名字
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(32))
def __repr__(self):
return "<User %r>" % self.username
flask-sqlalchemy常用配置项
- SQLALCHEMY_DATABASE_URI: 数据库连接
连接格式:
# dialect+driver://username:password@host:port/database_name
# mysql
mysql://root:root@localhost:3306/db_mysql
# postgresql
postgresql://root:root@localhost:5679/db_posgresql
# oracel
oracel://root:root@localhost:1521/db_oracel
# sqlite windows
sqlite:///C:\\User\\Desktop\\sqlite.db
# sqlite unix or mac
sqlite:////path/to/sqlite.db
例子:
SQLALCHEMY_DATABASE_URI = "mysql://user:pass@localhost:3306/db_name"
- SQLALCHEMY_ECHO: 如果设置为True,SQLAlchemy将记录向stderr发出的所有语句,这对开发调试会有帮助.
- SQLALCHEMY_TRACK_MODIFICATIONS: 如果设置为True,SQLAlchemy会跟踪修改的对象并发出信号,该值默认为Nonoe
模型字段
- Integer 一个整型字段
- String(size) 有长度限制的字符串
- Text 一个较长的unicode文本
- DateTime python datetime对象,表示一个日期和时间
- Float 浮点数类型字段
- Boolean 布尔类型字段
- PickleType 一个持久化的python对象
- LargeBinary 一个任意大的二进制数据
模型键的关联关系
- 一对多 ```python class User(db.Model): # 主表 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) addresses = db.relationship('Addresses', backref='person', lazy='dynamic')
class Addresses(db.Model): # 从表 id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(50)) person_id = db.Column(db.Integer, db.ForeignKey('person.id')) # 外键
2. 多对多
```python
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True),
db.Column('page_id', db.Integer, db.ForeignKey('page.id'), primary_key=True))
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
tags = db.relationship('Tag', secondary=tags, lazy='subquery', backref=db.backref('pages', lazy=True))
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
插入,删除,查询
- 插入: 插入操作实例化一个模型类,使用db对象中的add和commit方法即可 ```python from app.extendstions import db
user = User(name="jack") db.session.add(user) db.session.commit()
2. 删除: 删除的操作也非常的简单,调用db对象的delete方法即可
```python
db.session.delete(user)
- 查询: 查询操作使用query继续查询即可
User.query.filter_by(name="jack").first()
that's all