flask中mysql数据库的配置和使用

  • Post author:
  • Post category:mysql


一.创建数据库

通过命令行工具提前创建项目需要的数据库

注意事项:数据库需要开启远程登录权限

#1.登录数据库:
mysql -uusername -p

#2.创建新的登录用户:
create user newname identified by 'password';

#3.远程登录授权
grant all privileges on *.* to 'newusername'@'%' identified by 'password' with grant option;

#4.刷新
flush privileges;

#5.创建数据库
create database 'databasename'

二.数据库配置

文件:project/app/config.py

class Confit:
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACH_MODIFICATIONS = False

#开发环境
class DevelopmentConfig(Config):
    #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(base_dir,'blog-dev.sqlite')
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:1126482@localhost:3306/yiyou_dev?charset=utf8'
#测试环境
class TestingConfig(Config):
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:1126482@localhost:3306/yiyou_test?charset=utf8'

#生产环境
class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI =  'mysql+pymysql://root:1126482@localhost:3306/yiyou?charset=utf8'

三、创建模型

from app.extensions import db

class Country(db.Model):
    __tablename__='country'
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(30),unique=True)
    city = db.relationship('city', backref='country', lazy='lazy')


class City(db.Model):
    __tablename__='city'
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(30))
    country_id = db.Column(db.Integer,db.ForeignKey('country.id'))

四、数据库迁移

文件:project/app/manager.py

#一、导入数据库迁移扩展库
from flask_migrate import Migrate, MigrateCommand

#二、创建数据库迁移对象
migrate = Migrate(app,db)

#三、添加操作命令
manage.add_command('db',MigrateCommand)

运行:

  • 初始化数据库迁移仓库,会创建一个migrations的文件夹,存放迁移脚本

    python manage.py db init
  • 创建迁移脚本,会根据模型与数据表的差异创建弥补差异的脚本

    python manage.py db migrate
  • 执行迁移脚本,完成数据库的迁移

    python manage.py db upgrade

其他:添加manage命令,操作数据库

文件:project/app/manager.py

#创建命令行控制对象
manager = Manager(app)

#创建数据库
@manager.command
def create():
    db.create_all()
    return '数据库已创建'

#删除数据库
@manager.command
def drop():
    if prompt_bool('确定要删除数据库然后跑路吗?'):
        db.drop_all()
        return '数据库删除完成'
    return '删除需谨慎!'

运行:python manager.py(启动文件) create/drop



版权声明:本文为weixin_38748717原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。