Python-Flask数据库的使用(MySQL)

之前查看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 *  #*代表以上扩展名

连接MySQL数据库

目录结构设置请参考这里

  • 在config.py中添加数据库相关信息
#连接数据库的地址(使用pymysql拓展),'mysql+pymysql://username:password@serve/database'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123@localhost/blog'

#########################python2 使用下面这个
'mysql://root:123@localhost/blog'
  • 在__init__.py中 引入SQLAlchemy拓展并设置db对象
#导入SQLAlchemy拓展,方便对MYSQL操作
from flask_sqlalchemy import SQLAlchemy

#创建db对象,初始化数据库
db = SQLAlchemy(app)

到这里就已经连接好数据库了。
接下来我们讨论下,数据库创建和迁移。

这里使用拓展:alembic

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

到这里就已经完成了数据库的创建和迁移最基本的操作。如果想要探索更多新的内容。可以查看官方文档

目前的迁移貌似只能修改表和表结构。而关于内容的变化现在好像还不支持。
相关代码,大家可以参考。

你可能感兴趣的:(Python)