我的环境:
Windows10 + Python3.7 + Flask 1.0.2 + Pycharm 2018.2.3 Professional
前言:找了很多关于 flask_sqlalchemy
的教程都是针对python2.x
的,我自己在python3
环境下使用出现了各种问题,以下是摸索出的可行方案。
摘要
- 配置URI连接MySQL数据库
- 在MySQL中建立一张表
1.配置URI
通过下述语句配置数据库URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://<用户名>:<密码>@<数据库服务器地址>[:<端口>]/<数据库名称>[?<编码方式>]
说明:
- pymysql是数据库驱动名称,经我自己使用情况下只有这个驱动能用,mysqldb无法成功连接;另:在
flask_sqlalchemy
中无需单独使用pip命令安装就可以直接使用 - 在本机下使用默认情况下数据库服务器地址就填
localhost
或者127.0.0.1
MySQL默认端口为3306
不填此项则为默认值 - 编码方式推荐使用UTF8,Python3默认编码也是UTF8,此项填入
charset=utf8
即可(注意不是utf-8
,加-
会报错)
我的配置如下
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:3699@localhost/mydb?charset=utf8'
2. 使用flask_sqlalchemy
中的ORM建立一张表
百度百科定义ORM如下
对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
暂时没有去详细探究这个技术,目前能成功使用就好
我的理解如下:
这个概念在flask_sqlalchemy
中意思大概就是说把数据库中的各种数据模型与flask_sqlalchemy
中定义的数据模型(主要是各种类)进行对应
- 数据库模型映射
在配制好数据库URI后需要在Python中创建数据库对象,使用如下语句,即可将数据库与flask app绑定在配制好数据库URI后需要在Python中创建数据库对象,使用如下语句,即可将数据库与flask app绑定
db = SQLAlchemy(app)
- 数据表模型映射
假设要建立一张表article
,需要定义一个继承于db.Model
的类:
class Article(db.Model)
然后在这个类里面设置这张表的表头等信息
- 表名:
__tablename__ = 'article'
- 各个列:
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
最后用create_all()
方法建表
db.create_all()
通过命令行进入MySQL可以看见表已经生成
3.全部源码如下
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:3699@localhost/mydb?charset=utf8'
db = SQLAlchemy(app)
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
db.create_all()
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()