【问题标题】:Trying to start sqlalchemy database but got an error尝试启动 sqlalchemy 数据库但出现错误
【发布时间】:2021-08-10 01:58:50
【问题描述】:

这显示在我的 vs-studio 终端中:

>>> from app import db #this command is running successful.
>>> db.create_all() # this command not running.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Python\Practice\Flask\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 1039, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')

  File "D:\Python\Practice\Flask\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 1031, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)

  File "D:\Python\Practice\Flask\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 962, in get_engine
    return connector.get_engine()

  File "D:\Python\Practice\Flask\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 555, in get_engine
    options = self.get_options(sa_url, echo)

  File "D:\Python\Practice\Flask\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 570, in get_options
    self._sa.apply_driver_hacks(self._app, sa_url, options)

  File "D:\Python\Practice\Flask\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 883, in apply_driver_hacks
    if sa_url.drivername.startswith('mysql'):
AttributeError: 'bool' object has no attribute 'drivername'

【问题讨论】:

  • 能否提供定义dbapp 的代码?
  • app = Flask(name) app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite://///todo.db" app.config['SQLALCHEMY_DATABASE_URI'] = False app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) 类 Todo(db.Model): sno = db.Column(db.Integer, primary_key=True) title = db.Column(db.String( 100), nullable=False) desc = db.Column(db.String(500), nullable=False) date_created = db.Column(db.DateTime, default=datetime.utcnow) def __repr__(self) -> str: return f"{self.sno} - {self.title}"
  • 为什么app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite://///todo.db" 有五个/?应该是app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:////todo.db"
  • 那你为什么把SQLALCHEMY_DATABASE_URI设置成False呢?
  • 我认为您是不对的,您已收到此消息: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.。无论如何删除此字符串 app.config['SQLALCHEMY_DATABASE_URI'] = False 并将前一个字符串也修复为 app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:////todo.db"

标签: python flask sqlalchemy flask-sqlalchemy freesqldatabase


【解决方案1】:

在您的代码中:

app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite://///todo.db" app.config['SQLALCHEMY_DATABASE_URI'] = False app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

去掉这行代码:

app.config['SQLALCHEMY_DATABASE_URI'] = False

试试这几行代码:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

对于 VSCode 终端:

&gt;&gt;&gt; import app

&gt;&gt;&gt; from app import db

&gt;&gt;&gt; db.create_all()

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2022-11-13
    相关资源
    最近更新 更多