Python 没有这样的表格

Python 没有这样的表格,python,sqlite,flask,sqlalchemy,flask-sqlalchemy,Python,Sqlite,Flask,Sqlalchemy,Flask Sqlalchemy,我以前试过这个方法,效果很好,现在我又试了一次,但没有成功。我使用虚拟环境 db文件与init和models位于同一目录中。导入db后,我还在python shell中执行了db.create_all()。执行Students.query.all()时出错。我现在真的很困惑。我将我的代码与我现有的项目进行了比较,结果是一样的。我不明白为什么它不起作用 Traceback (most recent call last): File "C:\Users\Martin\Desktop\regtry

我以前试过这个方法,效果很好,现在我又试了一次,但没有成功。我使用虚拟环境

db文件与
init
models
位于同一目录中。导入db后,我还在python shell中执行了
db.create_all()
。执行
Students.query.all()
时出错。我现在真的很困惑。我将我的代码与我现有的项目进行了比较,结果是一样的。我不明白为什么它不起作用

Traceback (most recent call last):
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1246, in _execute_context
    cursor, statement, parameters, context
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\engine\default.py", line 581, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: students

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\orm\query.py", line 3211, in all
    return list(self)
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\orm\query.py", line 3367, in __iter__
    return self._execute_and_instances(context)
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\orm\query.py", line 3392, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\engine\base.py", line 982, in execute
    return meth(self, multiparams, params)
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\sql\elements.py", line 287, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1101, in _execute_clauseelement
    distilled_params,
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1250, in _execute_context
    e, statement, parameters, cursor, context
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1476, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\util\compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\util\compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1246, in _execute_context
    cursor, statement, parameters, context
  File "C:\Users\Martin\Desktop\regtry\venv\lib\site-packages\sqlalchemy\engine\default.py", line 581, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: students
[SQL: SELECT students.id AS students_id, students.last_name AS students_last_name, students.college AS students_college, students.email AS students_email
FROM students]
(Background on this error at: http://sqlalche.me/e/e3q8)
models.py:

from reg import db

class Students(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    last_name = db.Column(db.String(60), nullable=False)
    college = db.Column(db.String(60), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f"Student('{self.last_name}','{self.college}','{self.email}')"


这可能与调用db.create_all()的位置有关。您必须在定义所有模型后调用它。以下是一个模块中的工作示例:

导入烧瓶
从flask_sqlalchemy导入sqlalchemy
app=烧瓶。烧瓶(\uuuuu名称\uuuuuuu)
app.config['SECRET_KEY']=“3bce79429ad6b79670e4e800fb4a57b9”
app.config['SQLALCHEMY\u DATABASE\u URI']='sqlite:///site.db'
db=SQLAlchemy(应用程序)
班级学生(db.Model):
id=db.Column(db.Integer,主键=True)
last_name=db.Column(db.String(60),nullable=False)
college=db.Column(db.String(60),null=False)
email=db.Column(db.String(120),unique=True,nullable=False)
定义报告(自我):
返回f“学生({self.last_name},{self.college},{self.email})”
db.create_all()
@app.route(“/students”,methods=[“GET”])
定义所有学生():
students=students.query.all()
resp=[]
对于学生中的学生:
分别追加(
id=student.id,
姓氏=学生。姓氏,
学院,
email=student.email
))
回流瓶。jsonify(resp),200
@app.route(“/students/”,方法=[“GET”])
按学生id(学生id)定义学生:
student=Students.query.get(\u id)
如果学生:
resp=dict(
id=student.id,
姓氏=学生。姓氏,
学院,
email=student.email
)
回流瓶。jsonify(resp),200
其他:
返回“”,404
@app.route(“/students”,methods=[“POST”])
def add_student():
req=flask.request.get_json()
学生=学生(**req)
db.session.add(学生)
db.session.commit()
resp=烧瓶。作出响应()
响应头[“位置”]=flask.url\u用于(“学生id”,学生id=student.id)
返回resp,201
在您的示例中,我没有看到对db.create_all()的调用,但我怀疑它位于错误的位置。以您的示例为例,我相信如果您将调用从原来的位置移动到
\uuuu init\uuuuuuuuy.py
:

__初始值

从烧瓶导入烧瓶
从flask_sqlalchemy导入sqlalchemy
main=烧瓶(名称)
main.config['SECRET_KEY']=“3bce79429ad6b79670e4e800fb4a57b9”
main.config['SQLALCHEMY\u DATABASE\u URI']='sqlite:///site.db'
db=SQLAlchemy(主)
从reg导入路线
db.create_all()

在shell中,在执行
db.create_all()
之前,首先导入
数据库和
模型。显然,在创建数据库而不导入模型时会发生错误

我的错误是:

>>from APPFOLDER import db
>>db.create_all()
>>from APPFOLDER.models import MODELNAME
>>MODELNAME.query.all()
***ERROR MSG***
你应该做什么:

>>from APPFOLDER import db
>>from APPFOLDER.models import MODELNAME
>>db.create_all()
>>MODELNAME.query.all()
[]

首先,您可以使用数据库编辑器/查看器查看数据库中的内容。可能是代码创建了数据库,但不是表。或者它是在不同的文件夹中创建的,而您使用的是一些旧数据库。
>>from APPFOLDER import db
>>from APPFOLDER.models import MODELNAME
>>db.create_all()
>>MODELNAME.query.all()
[]