应用程序最核心的就是数据,每天我们写程序其实也是在处理数据的过程,那么很有必要系统性的讲讲和梳理python的flask框架是如何进行数据交互操作的。

趁这3天假期,分4篇内容来系统的讲讲,今天先分享第一篇。

一、flask构建mysql数据库的正确姿势。

二、flask常用的增删改查用法。

三、flask数据的一对多和多对多的关联查询。

四、flask实战的迁移数据库

1、SQLAlchemy

Flask中最方便用的数据库框架是 flask_sqlalchamy,是对 SQLAlchamy 在 Flask 中的扩展, SQLAlchemy 是一个 Python 数据库工具(ORM,即对象关系映射)。

使用扩展包flask-sqlalchemy来操作数据库(增删改查),通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升。可以让我们操作数据库跟操作对象是一样的,非常方便,因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象。

2、安装

pip install flask_sqlalchamy

安装之后,导入到项目中,对应用进行初始化:

from flask_sqlalchamy import SQLAlchamy  # 导入 SQLAlachamy

3、连接数据库

最常用的是mysql,最好的方式是写在configure里面,然后在flask的app主文件中通过app.config.from_object(configure)加载即可。

#配置mysql数据库

DIALECT = 'mysql' # 要用的什么数据库

DRIVER = 'pymysql' # 连接数据库驱动

USERNAME = 'root'

PASSWORD = 'XXXX'

HOST = 'XXXXX'

PORT = '3306'

DATABASE = 'hutong'

SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,DATABASE)

数据库的其他配置

名字

备注

SQLALCHEMY_DATABASE_URI

用于连接的数据库 URI 。例如:sqlite:tmp/test.dbmysql://username:password@server/db

SQLALCHEMY_BINDS

一个映射 binds 到连接 URI 的字典。更多 binds 的信息见用 Binds 操作多个数据库。

SQLALCHEMY_ECHO

如果设置为Ture, SQLAlchemy 会记录所有 发给 stderr 的语句,这对调试有用。(打印sql语句)

SQLALCHEMY_RECORD_QUERIES

可以用于显式地禁用或启用查询记录。查询记录 在调试或测试模式自动启用。更多信息见get_debug_queries()。

SQLALCHEMY_NATIVE_UNICODE

可以用于显式禁用原生 unicode 支持。当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上 某些版本的 PostgreSQL )。

SQLALCHEMY_POOL_SIZE

数据库连接池的大小。默认是引擎默认值(通常 是 5 )

SQLALCHEMY_POOL_TIMEOUT

设定连接池的连接超时时间。默认是 10 。

SQLALCHEMY_POOL_RECYCLE

多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定 这个值为 2 小时。

4、构建模型

假设需要构建一张表Article,如下,新建单独一个python文件,放在models目录下,使用Flask-SQLAlchemy创建模型与表的映射:

模型需要继承自db.Model,然后需要映射到表中的属性,必须写成db.Column的数据类型。该类继承自db.Model,__tablename__代表表名,不写的话默认类名的小写字母为表名。然后再是依次每个表字段的定义。

flask读取mysql视图 flask操作mysql数据库_eclipse连接mysql

常用的SQLAlchemy字段类型

类型名

python中类型

说明

Integer

int

普通整数,一般是32位

SmallInteger

int

取值范围小的整数,一般是16位

BigInteger

int或long

不限制精度的整数

Float

float

浮点数

Numeric

decimal.Decimal

普通整数,一般是32位

String

str

变长字符串

Text

str

变长字符串,对较长或不限长度的字符串做了优化

Unicode

unicode

变长Unicode字符串

UnicodeText

unicode

变长Unicode字符串,对较长或不限长度的字符串做了优化

Boolean

bool

布尔值

Date

datetime.date

时间

Time

datetime.datetime

日期和时间

LargeBinary

str

二进制文件

常用的SQLAlchemy列选项

选项名

说明

primary_key

如果为True,代表表的主键

unique

如果为True,代表这列不允许出现重复的值

index

如果为True,为这列创建索引,提高查询效率

nullable

如果为True,允许有空值,如果为False,不允许有空值

autoincrement

代表的是这个主键为自增长的。

default

为这列定义默认值

Flask中使用flask-sqlalchemy时db.create_all()无法创建表

1、导入from flask_demo.models import Role, User  # 导入模型类

2、添加应用上下文

3、with app.app_context():

4、db.create_all()

即可轻松新建数据表,当然数据库需要提前建好。

flask读取mysql视图 flask操作mysql数据库_mysql datetime 默认值_02