之前查看Flask框架相关教学资料。资料中使用的是sqlite数据库。这个跟自己平时开发时使用的MySQL数据库有点儿不太一样(sqlite以文件为载体,存储数据)。所以连接的时候也有些不太一样,对于初学者来说这就比较尴尬了,同时网上的资料也不多也不傻瓜。所以决定留下这篇文章,第一帮助初学者在Flask框架下使用MySQL数据库,第二也是给自己留下资料,担心自己以后忘记。
所需要的扩展:
1. flask-sqlalchemy
这是SQLAlchemy在flask框架下的拓展。SQLAlchemy是一个Python下的SQL和对象关系映射(ORM)的一个工具。使用它能够轻松将sql语句转换为对象操作,高效而有效。
2. pymysql(python3使用)
这是一个python连接MySQL的扩展。添加这个扩展可以轻松的为SQLAlchemy连接MySQL数据库。替代扩展有mysql-python(python2使用)
3. flask_whooshalchemy
为Alchemy提供全文检索。
具体细节,请参看本篇文章
以上这些扩展都可以使用
pip install * #*代表以上扩展名
目录结构设置请参考这里
#连接数据库的地址(使用pymysql拓展),'mysql+pymysql://username:password@serve/database'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123@localhost/blog'
#########################python2 使用下面这个
'mysql://root:123@localhost/blog'
#导入SQLAlchemy拓展,方便对MYSQL操作
from flask_sqlalchemy import SQLAlchemy
#创建db对象,初始化数据库
db = SQLAlchemy(app)
到这里就已经连接好数据库了。
接下来我们讨论下,数据库创建和迁移。
Alembic 是 Sqlalchemy 的作者实现的一个数据库版本化管理工具,它可以对基于Sqlalchemy的Model与数据库之间的历史关系进行版本化的维护,它的操作与git及其相似。参考Alembic简明教程和官方指导文档
1.初始化版本alembic
alembic init alembic
2.修改alembic基本配置
修改alembic.ini中数据库地址配置
# the output encoding used when revision files
# are written from script.py.mako
# output_encoding = utf-8
sqlalchemy.url = mysql+pymysql://root:123@localhost/blog
###########################python2 用下面这个
sqlalchemy.url = mysql://root:123@localhost/blog
3.创建版本
$ alembic revision -m "create account table"
Generating /path/to/yourproject/alembic/versions/1975ea83b712_create_account_table.py...done
4.在alembic/versions/1975ea83b712_create_account_table.py中写相关数据库操作
"""test create table
Revision ID: 51350d7fbfc6
Revises:
Create Date: 2016-10-11 12:26:01.812009
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '51350d7fbfc6'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
op.create_table(
'user',
sa.Column('id', sa.Integer, primary_key = True),
sa.Column('nickname', sa.String(64), unique = True),
sa.Column('password', sa.String(64), unique = True),
sa.Column('email', sa.String(64), unique = True),
sa.Column('role', sa.SmallInteger, default = 1)
)
op.create_table(
'post',
sa.Column('id', sa.Integer, primary_key = True),
sa.Column('body', sa.String(140), unique = True),
sa.Column('timestamp', sa.DateTime),
sa.Column('user_id', sa.Integer, sa.ForeignKey('user.id')),
)
def downgrade():
op.drop_table('user')
op.drop_table('post')
5.运行alembic来创建数据库
$ alembic upgrade head
到这里就已经完成了数据库的创建和迁移最基本的操作。如果想要探索更多新的内容。可以查看官方文档
目前的迁移貌似只能修改表和表结构。而关于内容的变化现在好像还不支持。
相关代码,大家可以参考。