赞
踩
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()

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。