查看用户帖子时出现Python错误

查看用户帖子时出现Python错误,python,python-3.x,flask,sqlalchemy,Python,Python 3.x,Flask,Sqlalchemy,我目前正在关注关于如何使用Flask构建网站的教程系列,然而,当我只关注这个家伙正在做的事情时,我遇到了一个非常令人沮丧的错误。现在,我为数据库设置了以下要访问的类: class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.S

我目前正在关注关于如何使用Flask构建网站的教程系列,然而,当我只关注这个家伙正在做的事情时,我遇到了一个非常令人沮丧的错误。现在,我为数据库设置了以下要访问的类:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"
然后,当我进入命令行查看用户的帖子时,即当我添加一个假用户时,将其添加到数据库中,然后将该用户设置为命令行中的变量
user
,并键入
user.posts
时,我会得到以下错误:

Traceback (most recent call last):
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 1193, in _execute_context
    context)
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\default.py", line 509, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: no such column: post.date_posted

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\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\orm\attributes.py", line 242, in __get__
        return self.impl.get(instance_state(instance), dict_)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\orm\attributes.py", line 601, in get
        value = self.callable_(state, passive)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\orm\strategies.py", line 631, in _load_for_state
        session, state, primary_key_identity, passive)
      File "<string>", line 1, in <lambda>
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\orm\strategies.py", line 771, in _emit_lazyload
        with_post_criteria(set_default_params).all()
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\ext\baked.py", line 457, in all
        return list(self)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\ext\baked.py", line 364, in __iter__
        return q._execute_and_instances(context)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\orm\query.py", line 3018, in _execute_and_instances
        result = conn.execute(querycontext.statement, self._params)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 948, in execute
        return meth(self, multiparams, params)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\sql\elements.py", line 269, in _execute_on_connection
        return connection._execute_clauseelement(self, multiparams, params)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 1060, in _execute_clauseelement
        compiled_sql, distilled_params
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 1200, in _execute_context
        context)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 1413, in _handle_dbapi_exception
        exc_info
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 265, in raise_from_cause
        reraise(type(exception), exception, tb=exc_tb, cause=cause)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 248, in reraise
        raise value.with_traceback(tb)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 1193, in _execute_context
        context)
      File "C:\Users\Ben\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\default.py", line 509, in do_execute
        cursor.execute(statement, parameters)
    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: post.date_posted [SQL: 'SELECT post.id AS post_id, post.title AS post_title, post.date_posted AS post_date_posted, post.content AS post_content, post.user_id AS post_user_id \nFROM post \nWHERE ? = post.user_id'] [parameters: (3,)] (Background on this error at: http://sqlalche.me/e/e3q8)
回溯(最近一次呼叫最后一次):
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\engine\base.py”,第1193行,在执行上下文中
(上下文)
文件“C:\Users\Ben\AppData\Local\Programs\Python37\lib\site packages\sqlalchemy\engine\default.py”,第509行,在do\u execute中
cursor.execute(语句、参数)
sqlite3.ERROR:没有这样的列:post.date\U posted
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\orm\attributes.py”,第242行,在__
返回self.impl.get(实例\状态(实例),dict\状态)
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\orm\attributes.py”,get中第601行
value=self.callable(状态,被动)
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\orm\strategies.py”,第631行,处于加载状态
会话,状态,主键(标识,被动)
文件“”,第1行,在
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\orm\strategies.py”,第771行,在\u emit\u lazyload中
使用post标准(设置默认参数)。all()
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\ext\bake.py”,第457行,共
返回列表(自我)
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\ext\bake.py”,第364行,在__
返回q._执行_和_实例(上下文)
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\orm\query.py”,第3018行,在执行和实例中
结果=conn.execute(querycontext.statement,self.\u参数)
文件“C:\Users\Ben\AppData\Local\Programs\Python37\lib\site packages\sqlalchemy\engine\base.py”,第948行,在execute中
返回方法(自身、多线程、参数)
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\sql\elements.py”,第269行,在连接上执行
返回连接。_execute_clauseelement(self、multiparams、params)
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\engine\base.py”,第1060行,在执行子句元素中
编译的sql,提取的参数
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\engine\base.py”,第1200行,在执行上下文中
(上下文)
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\engine\base.py”,第1413行,在_handle\u dbapi\u异常中
exc_信息
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\util\compat.py”,第265行,位于raise_from_cause中
重新释放(类型(异常),异常,tb=exc\U tb,原因=原因)
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\util\compat.py”,第248行,在reraise中
通过_回溯(tb)提升值
文件“C:\Users\Ben\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\engine\base.py”,第1193行,在执行上下文中
(上下文)
文件“C:\Users\Ben\AppData\Local\Programs\Python37\lib\site packages\sqlalchemy\engine\default.py”,第509行,在do\u execute中
cursor.execute(语句、参数)
sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的列:post.date\u posted[SQL:'选择post.id作为post\u id,post.title作为post\u title,post.date\u post作为post\u date\u posted,post.content作为post\u content,post.user\u id作为post\u用户id\n从post\n这里?=post.user\u id'.[参数:(3,)](有关此错误的背景信息,请访问:http://sqlalche.me/e/e3q8)

如果您的数据库中没有任何您不想丢失的数据,请运行
db.drop\u all()
然后运行
db.create\u all(),我将非常感谢您的帮助,以找出问题所在,谢谢
然后重试您的测试。看起来您在创建数据库后向模型中添加了
date\u post
列。是的,修复了它,谢谢!