为什么在使用Flask-SQLAlchemy填充数据库时出现UnmappedInstanceError?

4 投票
1 回答
10783 浏览
提问于 2025-04-18 11:04

我刚接触SQLAlchemy,现在在用Flask-SQLAlchemy做我的项目。最近遇到了一个让我很困惑的错误:

sqlalchemy.orm.exc.UnmappedInstanceError: Class 'flask_sqlalchemy._BoundDeclarativeMeta' is not mapped; was a class (app.thing.Thing) supplied where an instance was required?

我尝试过改变一些代码的写法,也试着调整了一些东西。这个问题可能和这个问题有关,还是其他什么原因呢?

这是我的模块(thing.py),里面有一个类是从Flask-SQLAlchemy的db.Model继承来的(就像SQLAlchemy的Base类):

from app import db

class Thing(db.Model):
    indiv_id = db.Column(db.INTEGER, primary_key = True)
    stuff_1 = db.Column(db.INTEGER)
    stuff_2 = db.Column(db.INTEGER)
    some_stuff = db.Column(db.BLOB)

    def __init__():
        pass

这是我在thing_wrangler.py模块中用来填充数据库的代码:

import thing
from app import db

def populate_database(number_to_add):
    for each_thing in range(number_to_add):
        a_thing = thing.Thing
        a_thing.stuff_1 = 1
        a_thing.stuff_2 = 2
        a_thing.some_stuff = [1,2,3,4,5]
        db.session.add(a_thing)
    db.session.commit()

1 个回答

8

你需要创建一个模型的实例。不是用 a_thing = thing.Thing 这样的写法,而是应该用 a_thing = thing.Thing()。注意这里有括号。因为你重写了 __init__ 方法,所以你还需要调整一下,让它的第一个参数是 self

撰写回答