为什么在使用Flask-SQLAlchemy填充数据库时出现UnmappedInstanceError?
我刚接触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
。