好的,所以我有一个非常基本的模型定义。我没有第一个线索从哪里开始。我真正想要检查的唯一事情就是表存在,而且确实存在,并且db.create_all()函数似乎能够根据模型定义创建表。
错误似乎是如此模糊,以至于它并没有真正给我任何关于在哪里寻找的线索。错误基本上是什么意思? class StatisticsAdapter extends ArrayAdapter<String>{
public StatisticsAdapter(@NonNull Context context, String[] resource) {
super (context, R.layout.listview_layout ,resource);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater ListInflate = LayoutInflater.from(getContext ());
StatsitcsHelper statsitcsHelper = new StatsitcsHelper ();
View customView = ListInflate.inflate (R.layout.listview_layout,parent,false);
String first = getItem (0);
TextView date = (TextView) customView.findViewById (R.id.List_Date);
String Second = getItem (1);
TextView Weight = (TextView) customView.findViewById (R.id.List_Weight);
String Thierd = getItem (2);
TextView Percent = (TextView) customView.findViewById (R.id.List_Percentage);
date.setText (first);
Weight.setText (Second);
Percent.setText (Thierd);
return customView;
}
}
类无法映射?它没有名为Setting
的属性?
以下是代码:
mapper
我也尝试检查shell中的代码......似乎正在运行。
# the model
class Setting(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
description = db.Column(db.String)
value_type = db.Column(db.String)
value = db.Column(db.String, nullable=False)
def get(name):
setting = db.session.query(Setting).filter(
Setting.name == name).first()
if setting.value_type == 'int':
return int(setting.value)
if setting.value_type == 'float':
return float(setting.value)
def all_settings():
return {s.name: s.value for s in db.session.query(Setting).all()}
# what's causing the exception:
def load_default_settings():
print("Loading default settings")
# in case it helps:
print(Setting.__dict__)
# {'__mapper__': <Mapper at 0x7f5633523278; Setting>, 'name': <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7f563356eca8>, '__table__': Table('setting', MetaData(bind=None), Column('id', Integer(), table=<setting>, primary_key=True, nullable=False), Column('name', String(), table=<setting>, nullable=False), Column('description', String(), table=<setting>), Column('value_type', String(), table=<setting>), Column('value', String(), table=<setting>, nullable=False), schema=None), '__doc__': None, '_cached_tablename': 'setting', 'description': <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7f563356ed58>, 'get': <function Setting.get at 0x7f5633581f28>, '__init__': <function __init__ at 0x7f5636806400>, 'id': <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7f563356ebf8>, 'value': <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7f563356eeb8>, 'value_type': <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7f563356ee08>, 'all_settings': <function Setting.all_settings at 0x7f563350c048>, '__module__': 'gg.settings', '_sa_class_manager': <ClassManager of <class 'gg.settings.Setting'> at 7f563350dd68>}
for name, details in SETTINGS.items():
# calling the Setting constructor below causes the exception
setting = Setting(
name=name,
description=details['description'],
value=details['value'],
value_type=details['value_type'])
db.session.add(setting)
db.session.commit()
# traceback
Traceback (most recent call last):
File "main.py", line 5, in <module>
import gg.cli
File "/home/nicken/freelance/project/gg/cli/__init__.py", line 75, in <module>
reset_all()
File "/home/nicken/freelance/project/gg/cli/__init__.py", line 55, in reset_all
load_initial_data()
File "/home/nicken/freelance/project/gg/cli/__init__.py", line 45, in load_initial_data
load_default_settings()
File "/home/nicken/freelance/project/gg/settings.py", line 84, in load_default_settings
value_type=details['value_type']))
File "<string>", line 2, in __init__
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/instrumentation.py", line 347, in _new_state_if_none
state = self._state_constructor(instance, self)
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/util/langhelpers.py", line 764, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/instrumentation.py", line 177, in _state_constructor
self.dispatch.first_init(self, self.class_)
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/event/attr.py", line 256, in __call__
fn(*args, **kw)
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/mapper.py", line 2976, in _event_on_first_init
configure_mappers()
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/mapper.py", line 2872, in configure_mappers
mapper._post_configure_properties()
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/mapper.py", line 1765, in _post_configure_properties
prop.init()
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/interfaces.py", line 184, in init
self.do_init()
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/relationships.py", line 1652, in do_init
self._process_dependent_arguments()
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/relationships.py", line 1709, in _process_dependent_arguments
self.target = self.mapper.mapped_table
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/util/langhelpers.py", line 850, in __getattr__
return self._fallback_getattr(key)
File "/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/util/langhelpers.py", line 828, in _fallback_getattr
raise AttributeError(key)
AttributeError: mapper
答案 0 :(得分:1)
好的,所以我找到了解决方案。
我查看了堆栈跟踪,打开了/home/nicken/freelance/project/lib/python3.4/site-packages/sqlalchemy/orm/relationships.py并转到第1709行。
然后我在第1709行上面放了一个print(self)
语句,这给了我更多关于问题出在哪里的信息。
事实证明......在我的代码的其他地方,在其他一些模型定义中,我有类似db.relationship('foo.bar.etc.SomeModel')
的内容,而传递给db.relationship()
的引用已不再有效,因为模型被提到的人已被移到其他地方。
这就是我如何解决它。