• 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 '数据添加成功'
  • 相关阅读:
    Telnet远程测试
    数据库笔记
    gcc 链接不到 函数实现, undefined reference to xxx
    usb2ttl 引脚定义
    ip v4 地址中 局域网地址范围
    vdi 磁盘文件转换为 vmdk文件的命令
    tftp 命令使用
    无法通过vnc连接到局域网内的树莓派
    镜像服务网站
    C语言 scanf 输入浮点数的用法
  • 原文地址:https://www.cnblogs.com/liangliangzz/p/10090505.html
Copyright © 2020-2023  润新知