Flask连接数据库可以使用如下三种方式 :
Python DBUtils 提供了稳固的、持久的到数据库的连接池,支持多线程应用环境。参见
SQLObject 是一个流行的Python 数据库对象映射框架,映射的规则就是表->类、字段->属性
SQLAlchemy 是一个Python 的SQL 工具包以及数据库对象映射框架, 是三个数据库框架中功能最全的
一般而言,还是喜欢SQLAlchemy的连接数据库的代码,另外SQLAlchemy也是三个数据库框架中功能最全的,如果只是实现简单的数据库连接池,那么就用dbutils,如果使用ORM,那还是用SQLAlchemy;sqlobject就略过了。
本内容参考 Flask使用MySql数据库
也可以参考 Flask最强攻略 - 跟DragonFire学Flask - 第十四篇 Flask-SQLAlchemy
Centos7 + python3.6 + mysql5.7
pip install flask-sqlalchemy
pip intall pymysql
Flask-SQLAlchemy数据库URL
常用的数据库引擎:
数据库引擎 | URL |
---|---|
MySql | mysql+pymysql://username:password@host/database |
Postgres | postgresql://username:password@host/database |
SQLite | sqlite:绝对路径/database |
app.py
编辑
#导入模块
from flask_sqlalchemy import SQLAlchemy
import pymysql
#创建flask对象
app = Flask(__name__)
#配置flask配置对象中键:SQLALCHEMY_DATABASE_URI
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://username:password@hostname/database"
#配置flask配置对象中键:SQLALCHEMY_COMMIT_TEARDOWN,设置为True,应用会自动在每次请求结束后提交数据库中变动
app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = Ture
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
#获取SQLAlchemy实例对象,接下来就可以使用对象调用数据
db = SQLAlchemy(app)
选择项 | 说明 |
---|---|
autoincrement | True 是否自增 |
primary_key | True 是否是主键 |
indexE | TRUE 是否是索引 |
unique | True 是否是唯一 |
nullable | True 是否允许字段为空 |
default | 默认值 |
类型名称 | python类型 | 描述 |
---|---|---|
Integer | int | 常规整型,通常为32位 |
SmallInteger | int | 短整型,通常为16位 |
BigInteger | int或long | 精度不受限整型 |
Float | float | 浮点型 |
Numeric | decimal | 定点数 |
String | str | 可变长度字符串 |
Text | str | 可变长度字符串,适合大量文本 |
Unicode | unicode | 可变长度Unicode字符串 |
Boolean | bool | 布尔值 |
Date | datetime.date | 日期类型 |
Time | datetime.time | 时间类型 |
DateTime | datetime.datetime | 日期时间类型 |
Interval | datetime.timedate | 时间间隔 |
Enum | str | 字符列表 |
PickleType | 任意Python对象 | 自动Pickle序列化 |
LargeBinary | str | 二进制 |
query对象是sqlalchemy中的专门用于查询相关操作的对象,主要分为执行函数和过滤函数
all()
first()
first_or_404()
get()
get_or_404()
count()
paginate()
filter()
filter_by()
limit()
offset()
order_by()
group_by()
from app import db
#创建模型对象
class User(db.Model):
__tablename__ = 'user' # 数据库中的表名
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
# 1.创建表
db.create_all()
# 2.增加记录
admin = User(username='admin', email='admin@example.com')
guest = User(username='guest', email='guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
#3.查询记录,注意查询返回对象,如果查询不到返回None
User.query.all() #查询所有
User.query.filter_by(username='admin').first()#条件查询
User.query.order_by(User.username).all()#排序查询
User.query.limit(1).all()#查询1条
User.query.get(id = 123)#精确查询
# 4.删除
user = User.query.get(id = 123)
db.session.delete(user)
db.session.commit()