SQLAlchemy是Python的一个ORM(对象关系映射)框架,可以让我们不需要写SQL语句就可以方便的操作数据库,只要定义相关的表类,就可以生成对应的表,以及通过定义的表类就可以方便地对数据库进行增删改查操作。
注:本文配置环境为mac
一、安装环境
- 安装mysql,使用homebrew来安装
> brew install mysql
# 随后根据提示配置数据库密码,是否禁止远程登陆,是否删除匿名用户等
由于SQLAlchemy没办法直接连接mysql,需要通过第三方驱动来连接,这里选择mysql-python。
- 安装mysql驱动mysql-python
# 首先安装mysql-connector-c
> brew install mysql-connector-c
# 再安装mysql-python
> sudo python3 -m pip install mysql-python
- 安装SQLAlchemy
python3 -m pip install flask-sqlalchemy
二、新建数据库 flaskdb
@>mysql -u root -p
@>密码(默认为空)
# 户创建一个数据库flaskdb
mysql>create database flaskdb;
# 授权
mysql>grant all privileges on flaskdb.* to root@localhost identified by 'root';
# 刷新权限
mysql>flush privileges;
三、建立工程
使用Pycharm建立flask工程,工程名称:FlaskDemo
配置数据库访问路径,用户和密码,在工程根目录下的config.py文件中添加:
# config.py
# 配置 sqlalchemy "数据库+数据库驱动://数据库用户名:密码@主机地址:端口/数据库?编码"
SQLALCHEMY_DATABASE_URI = "mysql://root:root@localhost:5000/flaskdb"
这里配置了SQLAlchemy默认的mysql驱动,驱动与安装的数据库有关系,我们之前安装的是mysql数据库,并且驱动为mysql-python
具体可以参考 http://docs.sqlalchemy.org/en/latest/core/engines.html?highlight=database#database-urls
四、初始化工程和数据库
操作数据库有两种方式,一是使用flask_sqlalchemy,另一个是直接使用原始的sqlalchemy。
其中flask-sqlalchemy是对sqlalchemy进行了一些封装,提供了一些常用工具,使用更简洁。
这里我们使用flask-sqlalchemy对数据进行操作,使用原始sqlalchemy的流程基本是一样的,使用语法稍微有点区别【具体可以参考文末Demo的just_sqlalchemy分支】。
- 新建db.py文件,创建db
# db.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
- 在工程目录下的init.py下(主要初始化流程都做了注释)
# __init__.py
from flask import Flask
from db import db
app = Flask(__name__) # 新建app对象
app.config.from_object('config') # 加载配置信息,其中有数据库的配置信息,包含在SQLALCHEMY_DATABASE_URI中
# 初始化db,并创建models中定义的表格
with app.app_context(): # 添加这一句,否则会报数据库找不到application和context错误
db.init_app(app) # 初始化db
db.create_all() # 创建所有未创建的table
- 初始化工程:
在FlaskDemo.py文件中:
# FlaskDemo.py
from _init_ import app
@app.route('/')
def hello_flask():
return 'Hello Flask!'
if __name__ == '__main__':
app.debug = app.config['DEBUG'] # 配置为Debug模式,这样修改文件后,会自动重启服务
app.run(host='0.0.0.0') # 这里配置为可在局域网中访问,默认为127.0.0.1,只能在本机访问
五、建立数据库表类
- 新建models.py文件,并创建User数据表类
# models.py
from db import db
class User(db.Model):
# Columns
__tablename__ = 'users' # 指定表名,可以写,同时可以不写,不写的话默认为类名小写
# id--字段名;db.Integer--数据类型;primary_key=True--是主键;autoincrement=True--是自增
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# name 字段名;string类型,字段长度为64;unique唯一的;index=True 可以建立索引
name = db.Column(db.String(64), unique=True, index=True)
pwd = db.Column(db.Integer, default=0)
def __init__(self, name, pwd):
self.name = name
self.pwd = pwd
def __repr__(self):
return '<User %r>' % self.name
def __str__(self):
return '<User %s>' % self.name
- 运行项目
通过Pycharm Run FlaskDemo。或者命令行运行:
python3 FlaskDemo
此时就会在flaskdb中创建出users数据表