数据库初始化不了

来源:4-6 生成用户数据

aumujun

2021-05-17

上完4-4准备调试,数据库报如下错误,老师帮忙看看呢

(restful)  ✘ mac@macdeMac-mini  ~/Documents/restful  python3 ginger.py                         
/Users/mac/.local/share/virtualenvs/restful-V3yZnvwa/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
Traceback (most recent call last):
  File "ginger.py", line 3, in <module>
    app = create_app()
  File "/Users/mac/Documents/restful/app/app.py", line 19, in create_app
    register_plugin(app)
  File "/Users/mac/Documents/restful/app/app.py", line 12, in register_plugin
    db.create_all()
  File "/Users/mac/.local/share/virtualenvs/restful-V3yZnvwa/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 963, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "/Users/mac/.local/share/virtualenvs/restful-V3yZnvwa/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 955, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
  File "/Users/mac/.local/share/virtualenvs/restful-V3yZnvwa/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 896, in get_engine
    return connector.get_engine()
  File "/Users/mac/.local/share/virtualenvs/restful-V3yZnvwa/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 556, in get_engine
    self._sa.apply_driver_hacks(self._app, info, options)
  File "/Users/mac/.local/share/virtualenvs/restful-V3yZnvwa/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 831, in apply_driver_hacks
    info.query.setdefault('charset', 'utf8')
AttributeError: 'sqlalchemy.cimmutabledict.immutabledict' object has no attribute 'setdefault'

代码如下

from flask import Flask


def register_blueprint(app):
    from app.api.v1 import create_blueprint_v1
    app.register_blueprint(create_blueprint_v1(), url_prefix='/v1')

def register_plugin(app):
    from app.models.base import db
    db.init_app(app)
    with app.app_context():
        db.create_all()

def create_app():
    app = Flask(__name__)
    app.config.from_object('app.config.setting')
    app.config.from_object('app.config.secure')
    register_blueprint(app)
    register_plugin(app)
    return app

from datetime import datetime

from flask_sqlalchemy import SQLAlchemy as _SQLAlchemy, BaseQuery
from sqlalchemy import inspect, Column, Integer, SmallInteger, orm
from contextlib import contextmanager

class SQLAlchemy(_SQLAlchemy):
    @contextmanager
    def auto_commit(self):
        try:
            yield
            self.session.commit()
        except Exception as e:
            db.session.rollback()
            raise e


class Query(BaseQuery):
    def filter_by(self, **kwargs):
        if 'status' not in kwargs.keys():
            kwargs['status'] = 1
        return super(Query, self).filter_by(**kwargs)



db = SQLAlchemy(query_class=Query)


class Base(db.Model):
    __abstract__ = True
    create_time = Column(Integer)
    status = Column(SmallInteger, default=1)

    def __init__(self):
        self.create_time = int(datetime.now().timestamp())

    @property
    def create_datetime(self):
        if self.create_time:
            return datetime.fromtimestamp(self.create_time)
        else:
            return None

    def set_attrs(self, attrs_dict):
        for key, value in attrs_dict.items():
            if hasattr(self, key) and key != 'id':
                setattr(self, key, value)
    
    def delete(self):
        self.status = 0
写回答

2回答

网络连接已断开

2021-05-18

复制这段提示到搜索引擎:

FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning

有很很多解决方案,同学可以尝试下

0
1
aumujun
这个警告解决了,但是报错还在 AttributeError: 'sqlalchemy.cimmutabledict.immutabledict' object has no attribute 'setdefault'
2021-05-18
共1条回复

aumujun

提问者

2021-05-17

(restful)  mac@macdeMac-mini  ~/Documents/restful  pipenv graph

cymysql==0.9.1

email-validator==1.1.2

  - dnspython [required: >=1.15.0, installed: 2.1.0]

  - idna [required: >=2.0.0, installed: 2.6]

Flask-Cors==2.1.0

  - Flask [required: >=0.9, installed: 1.0]

    - click [required: >=5.1, installed: 7.1.2]

    - itsdangerous [required: >=0.24, installed: 1.1.0]

    - Jinja2 [required: >=2.10, installed: 2.11.3]

      - MarkupSafe [required: >=0.23, installed: 1.1.1]

    - Werkzeug [required: >=0.14, installed: 1.0.1]

  - Six [required: Any, installed: 1.15.0]

Flask-HTTPAuth==2.7.0

  - Flask [required: Any, installed: 1.0]

    - click [required: >=5.1, installed: 7.1.2]

    - itsdangerous [required: >=0.24, installed: 1.1.0]

    - Jinja2 [required: >=2.10, installed: 2.11.3]

      - MarkupSafe [required: >=0.23, installed: 1.1.1]

    - Werkzeug [required: >=0.14, installed: 1.0.1]

Flask-SQLAlchemy==2.3.2

  - Flask [required: >=0.10, installed: 1.0]

    - click [required: >=5.1, installed: 7.1.2]

    - itsdangerous [required: >=0.24, installed: 1.1.0]

    - Jinja2 [required: >=2.10, installed: 2.11.3]

      - MarkupSafe [required: >=0.23, installed: 1.1.1]

    - Werkzeug [required: >=0.14, installed: 1.0.1]

  - SQLAlchemy [required: >=0.8.0, installed: 1.4.15]

    - greenlet [required: !=0.4.17, installed: 1.0.0]

    - importlib-metadata [required: Any, installed: 4.0.1]

      - typing-extensions [required: >=3.6.4, installed: 3.7.4.3]

      - zipp [required: >=0.5, installed: 3.4.1]

Flask-WTF==0.14.2

  - Flask [required: Any, installed: 1.0]

    - click [required: >=5.1, installed: 7.1.2]

    - itsdangerous [required: >=0.24, installed: 1.1.0]

    - Jinja2 [required: >=2.10, installed: 2.11.3]

      - MarkupSafe [required: >=0.23, installed: 1.1.1]

    - Werkzeug [required: >=0.14, installed: 1.0.1]

  - WTForms [required: Any, installed: 2.2.1]

requests==2.18.4

  - certifi [required: >=2017.4.17, installed: 2020.12.5]

  - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]

  - idna [required: >=2.5,<2.7, installed: 2.6]

  - urllib3 [required: >=1.21.1,<1.23, installed: 1.22]


0
2
gxuthr
解决了,sqlalchemy版本切换到1.2.7就可以了
2022-06-27
共2条回复

Python Flask高级编程之RESTFul API前后端分离精讲

RESTFul+权限管理+token令牌+扩展flask=提升编程思维

2037 学习 · 359 问题

查看课程