Flask-SQLAlchemy 的基本使用
安装
python -m pip install flask
python -m pip install flask-sqlalchemy
python -m pip install pymysql
建议直接安装当前稳定版(本笔记基准:Flask 3.1.3 + Flask-SQLAlchemy 3.x)。
连接数据库
连接mysql数据库
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
app = Flask(__name__)
DB_HOST = "192.168.1.112"
DB_PORT = 3306
DB_USER = "root"
DB_PASS = "123456"
DB_NAME = "flask"
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
db = SQLAlchemy(app)
# 低版本flask不需要写 app_context
with app.app_context():
with db.engine.connect() as conn:
# 低版本sqlalchemy不需要 text
rs = conn.execute(text("select 1"))
print(rs.fetchone())
运行输出结果
(1,)
ORM模型
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
app = Flask(__name__)
DB_HOST = "192.168.1.112"
DB_PORT = 3306
DB_USER = "root"
DB_PASS = "123456"
DB_NAME = "flask"
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(80), nullable=False)
password = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __init__(self, username, password, email):
self.username = username
self.password = password
self.email = email
def __repr__(self) -> str:
return f"<User {self.id}>"
with app.app_context():
# 将User Model映射为数据表
db.create_all()
Flask-SQLAlchemy还支持以下字段类型
| 类型 | 说明 |
|---|---|
db.Integer | 整型 |
db.SmallInteger | 短整型 |
db.BigInteger | 长整型 |
db.Decimal | 定点类型,可以指定小数位 |
db.Boolean | 布尔类型 |
db.Date | 日期类型。存储datetime.date对象 |
db.DateTime | 日期时间类型。存储datetime.datetime对象 |
db.Time | 时间类型。存储Python的datetime.time对象 |
db.Interval | 时间间隔。存储Python的datetime.timedelay对象 |
db.String | 字符串类型 |
db.Text | 文本类型 |
db.Enum | 枚举类型 |
db.PickleType | 存储经过pickle的对象 |
db.LargeBinary | 存储二进制数据 |