当前位置: 首页 > 面试题库 >

flask中的sqlalchemy.orm.exc.UnmappedInstanceError

方轩昂
2023-03-14
问题内容

我一直在阅读SQLAlchemy文档,但我听不懂。错误(UnmappedInstanceError)表示未映射某些内容。没有映射什么?我真的没有sqlalchemy,我想回到使用裸sqlite的方法,但是很多人推荐这样做,所以我认为我应该学习它。这是回溯:

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)

File "C:\Users\Me\repos\mandj2\app\views.py", line 170, in add_manentry
db.session.add(q)

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\sqlalchemy\orm\scoping.py", line 149, in do
return getattr(self.registry(), name)(*args, **kwargs)

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\sqlalchemy\orm\session.py", line 1452, in add
raise exc.UnmappedInstanceError(instance)

UnmappedInstanceError: Class '__builtin__.unicode' is not mapped

这是适用的代码:

@app.route('/addm', methods=['POST'])
def add_mentry():
    if not session.get('logged_in'):
        abort(401)
    form = MForm(request.form)
    filename = ""
    if request.method == 'POST':
        cover = request.files['cover']
        if cover and allowed_file(cover.filename):
            filename = secure_filename(cover.filename)
            cover = cover.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

    q = request.form['name']
    # do for 12 more fields
    db.session.add(q)
    db.session.commit()
    flash('New entry was successfully posted')
    return redirect(url_for('moutput'))

问题答案:
q = request.form['name']
# do for 12 more fields
db.session.add(q)

request.form['name']将返回一个unicode值。那你就…

db.session.add(q)

会话的目标是跟踪实体(Python对象),而不是你似乎想这样做的单个unicode值。因此,你应该添加具有映射关系的User对象(例如ORM教程的“映射”部分中显示的对象),但实际上是在传递简单的unicode值

你所使用的只是SQLAlchemy的一部分:ORM(对象关系映射器)。ORM将尝试做一些事情,例如允许你创建一个新的python对象,并通过将对象“html" target="_blank">添加”到会话中来自动生成SQL。

a = MyEntity()
session.add(a)
session.commit() # Generates SQL to do an insert for the table that MyEntity is for

请记住,你可以在不使用ORM功能的情况下使用SQLAlchemy。你只db.execute('INSERT...', val1, val2)需要替换已经“裸”的SQL。SQLAlchemy将为你提供连接池等(尽管如果你使用的是SQLite,则可能不关心连接池)。

如果你想了解Flask-SQLAlchemy,我首先建议你通过使用简单的脚本(如教程中所示)尝试一下SQLAlchemy的工作原理(尤其是ORM方面),然后你将了解Flask-SQLAlchemy的工作原理。 。



 类似资料:
  • Flask 与 Jinja2 、 Werkzeug 一样,文本方面完全基于 Unicode ,大多数 web 相关的 Python 库同样这样处理文本。如果你还不知道 Unicode 是什么,可能需要阅读 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and

  • 问题内容: 这个问题可能已经有人提出过,而且回答的可能性更大,但是我不知道在哪里可以找到它。 问题:我有一个用于pythonflask的路由器,该路由器需要花费一些时间来处理每个调用的数据。我需要使对路由的每个调用本身就是一个线程,因此它不必等待请求被加载。 问题答案: Flask带有内置的开发Web服务器,但是你不应该在生产环境中使用它。 为了获得一些很酷的功能,例如为每个请求和静态文件服务提供

  • 如果你好奇 Flask 为什么用它的方式做事情,而不是别的方法,那么这节是为你准 备的。这节应该给你一些设计决策的想法,也许起初是武断且令人惊讶的,特别是 直接与其它框架相比较。 显式的应用对象 一个基于 WSGI 的 Python web 应用必须有一个中央的可调用对象来实现实际的应 用。在 Flask 中,这是一个 Flask 类的实例。每个 Flask 应用 必须创建一个该类的实例,并传给它

  • 问题内容: 我的文件如下所示: 我运行并得到以下信息: 我确实安装了flask。我以为是$ PATH问题。就故障排除而言,我真的不知道从哪里开始。 给我: 给我: 非常感谢任何帮助,还有其他类似的问题,但是这些解决方案没有帮助。很高兴回答任何问题。谢谢。 问题答案: 问: 哪个Python版本? A. Python的2.7.10 问: 如何安装Flask? A.点子安装flask 问题答案: 在运

  • 问题内容: Flask文档显示: “端点”到底是什么意思? 问题答案: flask路由如何工作 Flask(和基础的Werkzeug库)的整个想法是将URL路径映射到你将要运行的某些逻辑(通常是“视图功能”)。基本视图的定义如下: 请注意,你引用的函数(add_url_rule)达到了相同的目标,而无需使用装饰符表示法。因此,以下是相同的: 假设你的网站位于“ www.example.org”并使

  • 问题内容: 无法使jQuery自动完成小部件与Flask框架一起使用。(http://jqueryui.com/autocomplete/#remote这里是一个示例) 在manage.py中,我得到了以下内容: 我的index.html文件: 似乎firefox中的开发工具不会返回任何错误。终端返回以下内容: 小部件不起作用。由于我对jQuery知之甚少,所以我不知道是什么原因导致了问题。有人可