【问题标题】:Flask_SQLAlchemy create_all() doesn't workFlask_SQLAlchemy create_all() 不起作用
【发布时间】:2021-03-15 21:42:02
【问题描述】:

我开始学习如何在我的代码中使用 SQLAlchemy,但由于某种原因,当我运行代码时,它引发了这个异常:

Traceback (most recent call last):
  File "C:/Users/smadar.KLAG/PycharmProjects/keylogger/site/practice.py", line 118, in <module>
    db.create_all()
  File "C:\Users\c\projects\test\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 1039, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "C:\Users\c\projects\test\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 1031, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
  File "C:\Users\c\projects\test\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 962, in get_engine
    return connector.get_engine()
  File "C:\Users\c\projects\test\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 555, in get_engine
    options = self.get_options(sa_url, echo)
  File "C:\Users\c\projects\test\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 570, in get_options
    self._sa.apply_driver_hacks(self._app, sa_url, options)
  File "C:\Users\c\projects\test\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 914, in apply_driver_hacks
    sa_url.database = os.path.join(app.root_path, sa_url.database)
AttributeError: can't set attribute

这是代码:


from flask import Flask, redirect, url_for, render_template, request, session, flash
from time import sleep
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.sqlite3'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)

class Users(db.Model):
    _id = db.Column("id", db.Integer, primary_key=True)
    email = db.Column(db.String(100))
    password = db.Column(db.String(100))



if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

我尝试运行我的一个朋友的代码,他有 SQLAlchemy(该代码对他有用),以防这是一个编码问题,但我也遇到了与他的代码相同的错误。
是不是我做错了什么?

【问题讨论】:

  • 您是否将您的模块版本与您的朋友进行了比较?与 Python 相同
  • 我们都一对一地使用了相同的关于如何建立数据库的教程,但由于某种原因,它对他有用,而对我不起作用(我没有尝试给出他是我的代码)。我也在 3.7 上运行
  • 好奇地将 SQLALCHEMY_DATABASE_URI 设置为 "sqlite:///:memory:" 是可行的,因此无论出于何种原因,它都无法生成实际文件,请尝试升级到较新的 python 版本?我会做同样的事情并尽快报告
  • 这很奇怪,如果我将其更改为内存,它也对我有用,尽管出于某种原因我的朋友仍然可以使用 sqlite:///users.sqlite3。有可能是因为他已经建立了数据库,但我不确定。
  • 如果是这样,我认为这是他们的问题,除非我们不知道缺少某些东西,尽管这不太可能,因为问题的根源是设置 SQLALCHEMY_DATABASE_URI到 sqlite:///users.sqlite3。有什么特别的东西吗?

标签: python flask sqlalchemy flask-sqlalchemy


【解决方案1】:

我也遇到了这个。看起来 SQLAlchemy 刚刚发布了 1.4 版,它破坏了 flask_sqlalchemy。

我能够通过安装以前的 (1.3) 版本来解决我系统上的问题。

【讨论】:

    【解决方案2】:

    编辑:SQLAlchemy 的最新版本现在可以使用(撰写本文时为 1.4 版)

    安装 SQLAlchemy 1.3.23 对我有用。

    pip install SQLAlchemy==1.3.23
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 2022-01-14
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多