Please edit configuration/connection/logging settings in '/home/mac126/Desktop/13/test3-1/migrations/alembic.ini' before proceeding.

flask迁移生成两个表,初始化

python manage.py db init

  结果出来的就是

Creating directory /home/mac126/Desktop/13/test3-1/migrations ... done
  Creating directory /home/mac126/Desktop/13/test3-1/migrations/versions ... done
  Generating /home/mac126/Desktop/13/test3-1/migrations/env.py ... done
  Generating /home/mac126/Desktop/13/test3-1/migrations/README ... done
  Generating /home/mac126/Desktop/13/test3-1/migrations/alembic.ini ... done
  Generating /home/mac126/Desktop/13/test3-1/migrations/script.py.mako ... done
  Please edit configuration/connection/logging settings in
  '/home/mac126/Desktop/13/test3-1/migrations/alembic.ini' before proceeding.

本以为是个错误,其实这个只要你初始化python manage.py db init就会出现这个,这个不是错误。既然不是错误为什么创建的两个表没有成功呢,运行也可以的,就是没有表,继续看

进行python manage.py db migrate迁移
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.env] No changes in schema detected.

no changes in schema detected自然不会生成新表,百度了一下,方案很多木有解决,抱着尝试的态度,最终解决了,废话不多说,看源码:

#创建manage.py文件
from flask_migrate import MigrateCommand
from flask_script import Manager

from app import create_app

app = create_app('developConfig')

manage=Manager(app)

manage.add_command('db',MigrateCommand)
#迁移的时候一定要加,不加报错manage.py: error: invalid choice: 'db' (choose from 'shell', 'runserver')

if __name__ == '__main__':
    manage.run()


# 如果想要使用session ,必须要给定一个SECRET_KEY
# 因为flask没有对session进行处理,所以,我们需要自己去处理session,也就是将session进行持久化  ,默认存储在系统的内存中
# 那么我们要将它放到制定的地方  redis
# 需要一个配置信息   SESSION_TYPE = 'redis'
# Session(app)

# 'mysql+pymysql://root:123456@localhost:3306/database'

# 使用flask-sqlalchemy   需要两个配置信息
# SQLALCHEMY_DATABASE_URI
# 自己去看警告信息

# ext.py   里面主要放第三方扩展包的初始化信息
# settings.py  所有的配置信息  ,配置文件

# db.createall()
# db.drop_all()

# db.session.add(对象)
# db.session.commit()


# 数据库的事务:
# 原子性:不可再分    一致性:保持一致   隔离性:不能受到外界影响   持久性:做长久保存
# http://www.cnblogs.com/fjdingsd/p/5273008.html
#创建__init__.py文件
from flask import Flask

from app import settings
from app.ext import init_ext
from app.views import blue


def create_app(envir):
    app = Flask(__name__)
    app.register_blueprint(blueprint=blue)
    app.config.from_object(settings.config_info.get(envir))
    init_ext(app)  # 没有这个会报KeyError: 'migrate'

    return app
#创建settings.py文件
# 关于咱们的四个生产环境
# 开发环境    测试环境   演示环境   线上环境
#针对MySQL的数据库配置,可以调用没有写死
def get_database_url(info):
    name = info.get('name') or 'mysql'
    username = info.get('username') or 'root'
    password = info.get('password') or '123456'
    host = info.get('host') or 'localhost'
    port = info.get('port') or '3306'
    driver = info.get('driver') or 'pymysql'
    database = info.get('database') or 'num1'

    return '{}+{}://{}:{}@{}:{}/{}'.format(name,driver,username,password,host,port,database)

#配置信息类也可以说是线上环境
class Config():
    DEBUG = False#默认调试模式关闭
    TESTING = False#测试模式关闭
    SECRET_KEY = '123'#密钥
    SESSION_TYPE = 'redis'#session存储类型
    SQLALCHEMY_TRACK_MODIFICATIONS = False#报的一个提示不是错,只是一个警告信息,通过这个可以关闭提示,想了解可以注释掉自己看看



#开发环境
class DevelopConfig(Config):

    DEBUG = True
    TESTING = True

    database = {
        'username': 'root',
        'password': '123456',
        'host': 'localhost',
        'port': '3306',
        'database': 'num1',
        'driver':'pymysql',
        'name' : 'mysql'
    }

    # 链接数据库的url
    SQLALCHEMY_DATABASE_URI = get_database_url(database)

#测试环境
class TestConfig(Config):
    TESTING = True

    database = {
         'username': 'root',
        'password': '123456',
        'host': 'localhost',
        'port': '3306',
        'database': 'num1',
        'driver':'pymysql',
        'name' : 'mysql'
    }

    SQLALCHEMY_DATABASE_URI = get_database_url(database)

#演示环境
class ShowConfig(Config):

    database = {
        'username': 'root',
        'password': '123456',
        'host': 'localhost',
        'port': '3306',
        'database': 'num1',
        'driver': 'pymysql',
        'name': 'mysql'
    }

    SQLALCHEMY_DATABASE_URI = get_database_url(database)

#生产环境
class WorkConfig(Config):

    database = {
         'username': 'root',
        'password': '123456',
        'host': 'localhost',
        'port': '3306',
        'database': 'num1',
        'driver':'pymysql',
        'name' : 'mysql'
    }

    SQLALCHEMY_DATABASE_URI = get_database_url(database)


#封装四个开发环境
config_info = {

    "WorkConfig": WorkConfig,
    "developConfig":DevelopConfig,
    "testConfig": TestConfig,
    "showConfig": ShowConfig,
    "default": DevelopConfig,
}
#创建ext.py文件
from flask_migrate import Migrate
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy


db = SQLAlchemy()

migrate=Migrate(db=db)



def init_ext(app):
    db.init_app(app)
    migrate.init_app(app)

    sess=Session()

    sess.init_app(app)
#创建views.py文件
from flask import Blueprint

blue=Blueprint('first',__name__)


@blue.route('/')
def hello_world():
    return 'Hello World!'
#创建modles.py文件
from app.ext import db


class User(db.Model):
    u_id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    u_name = db.Column(db.String(32))
    u_age = db.Column(db.Integer)


class Person(db.Model):
    p_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    p_name = db.Column(db.String(32))
    p_age = db.Column(db.Integer)
    goods = db.relationship('Goods',backref='person')

检查运行没有错误,表就是不生成。我在views.py文件里面添加了增减用户函数,问题神奇的解决了

views.py文件

from flask import Blueprint

from app.ext import db
from app.modles import User

blue=Blueprint('first',__name__)

@blue.route('/')
def hello_world():
    return 'Hello World!'
@blue.route('/adduser/')
def add_user():
    # 添加单个数据
    user = User()

    user.u_name = '老贾'
    user.u_age = 18

    db.session.add(user)
    db.session.commit()

    return '数据添加成功'
原文地址:https://www.cnblogs.com/liangliangzz/p/10090505.html