【发布时间】: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