Python TypeError: option values must be strings in Migrator

Python TypeError: option values must be strings in Migrator

迁移器错误

Traceback (most recent call last): File > "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/bin/flask", > line 8, in > sys.exit(main()) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/flask/cli.py", >line 894, in main >cli.main(args=args, prog_name=name) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/flask/cli.py", > line 557, in main >return super(FlaskGroup, self).main(*args, **kwargs) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/click/core.py", > line 697, in main >rv = self.invoke(ctx) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/click/core.py", > line 1066, in invoke >return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/click/core.py", >line 1066, in invoke >return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/click/core.py", >line 895, in invoke >return ctx.invoke(self.callback, **ctx.params) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/click/core.py", > line 535, in invoke >return callback(*args, **kwargs) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/click/decorators.py", >line 17, in new_func >return f(get_current_context(), *args, **kwargs) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/flask/cli.py", > line 412, in decorator >return __ctx.invoke(f, *args, **kwargs) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/click/core.py", > line 535, in invoke >return callback(*args, **kwargs) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/flask_migrate/cli.py", >line 90, in migrate >rev_id, x_arg) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/flask_migrate/init.py", >line 197, in migrate >version_path=version_path, rev_id=rev_id) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/alembic/command.py", >line 176, in revision >script_directory.run_env() File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/alembic/script/base.py", >line 427, in run_env >util.load_python_file(self.dir, 'env.py') File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/alembic/util/pyfiles.py", line 81, in load_python_file >module = load_module_py(module_id, path) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/alembic/util/compat.py", >line 83, in load_module_py >spec.loader.exec_module(module) File "", line 678, in exec_module File >"", line 219, in >_call_with_frames_removed File "migrations/env.py", line 22, in >current_app.config.get('SQLALCHEMY_DATABASE_URI')) File "/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/alembic/config.py", >line 218, in set_main_option >self.set_section_option(self.config_ini_section, name, value) File >"/home/arjdu-d-1890/PycharmProjects/git-local-repo/example-flask-crud/venv/lib/python3.6/site-packages/alembic/config.py", >line 245, in set_section_option >self.file_config.set(section, name, value) File "/usr/lib/python3.6/configparser.py", line 1192, in set >self._validate_value_types(option=option, value=value) File "/usr/lib/python3.6/configparser.py", line 1177, in >_validate_value_types >raise TypeError("option values must be strings") TypeError: option values must be strings

Here is the Code 

> **init.py**

from flask import Flask

from app.config import Config

from flask_sqlalchemy import SQLAlchemy
class Config(object):
    SECRET_KEY = 'do-or-do-not-there-is-no-try'
    SQLALCHEMY_DATABASE_URI = pymssql.connect('192.168.52.75', 'devteam', 'dev@@2017', 'StudDb')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

from flask_migrate import Migrate

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

from app import routes, models


**Config.py**

import pymssql
from sqlalchemy import create_engine

    class Config(object):
        SECRET_KEY = 'do-or-do-not-there-is-no-try'
        SQLALCHEMY_DATABASE_URI = pymssql.connect('192.168.52.75', 'devteam', 'dev@@2017', 'StudDb')
        SQLALCHEMY_TRACK_MODIFICATIONS = False

**Models.py**

from app import db

class Entry(db.Model):
    __table_args__ = {'extend_existing': True}
class Config(object):
    SECRET_KEY = 'do-or-do-not-there-is-no-try'
    SQLALCHEMY_DATABASE_URI = pymssql.connect('192.168.52.75', 'devteam', 'dev@@2017', 'StudDb')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64), index=True, nullable=False)
    description = db.Column(db.String(120), index=True, nullable=False)
    status = db.Column(db.Boolean, default=False)

    def __repr__(self):
        return '<Entry {}>'.format(self.description)

根据堆栈跟踪,错误取决于 SQLALCHEMY_DATABASE_URI 的类型,它应该是字符串而不是 Connection 对象。

示例:

  • "sqlite:////tmp/test.db"
  • "mysql://username:password@server/db"