- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在构建一个数据库,将我的本地产品目录与外国产品目录相匹配。当我有唯一的表'Catalog'
时,SQLAlchemy 工作得很好。添加表 Competitors
和 Competitors_catalog
后,我向两个新表添加记录的所有尝试均返回错误。
AttributeError: 'Table' object has no attribute 'id'
我多次更改/删除/播放Competitors
和Competitors_catalog
之间的关系,通过flask-migrate
来回删除和创建表,但不断收到相同的错误。像 Competitors.query.all()
这样的简单查询返回相同的结果。删除了 db.relationship() - 相同的结果。然后我最终回滚到一个干净的数据库,并从头开始使用 Flask-migrate 启动它。之后,我开始收到相同的错误,尝试将记录添加到Catalog
表,在我回滚之前,它运行良好。这很奇怪,因为我没有对那部分代码进行任何更改。
class Catalog(db.Model):
__tablename__ = 'catalog'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), index=True, nullable=False)
parent_id = db.Column(db.Integer, db.ForeignKey('catalog.id'), default=None)
url = db.Column(db.String())
created = db.Column(db.DateTime, default=datetime.now())
last_modified = db.Column(db.DateTime, index=True, onupdate=datetime.now())
categories = db.relationship('Catalog', remote_side='catalog.id', backref='parent')
class Competitors(db.Model):
__tablename__ = 'competitors'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(40), index=True, nullable=False)
base_url = db.Column(db.String())
cat_url = db.Column(db.String())
created = db.Column(db.DateTime, default=datetime.now())
last_modified = db.Column(db.DateTime, onupdate=datetime.now(), default=datetime.now())
sells = db.relationship('Competitors_catalog', backref='competitor', cascade="all, delete-orphan", passive_deletes=True, lazy='dynamic')
class CompCatalog(db.Model):
__tablename__ = 'compcatalog'
id = db.Column(db.Integer, primary_key=True)
out_id = db.Column(db.Integer)
name = db.Column(db.String(60), index=True, nullable=False)
top_section = db.Column(db.Integer, default=None)
comp_id = db.Column(db.Integer, db.ForeignKey('competitors.id', ondelete="CASCADE"))
url = db.Column(db.String())
created = db.Column(db.DateTime, default=datetime.now())
last_modified = db.Column(db.DateTime, index=True, onupdate=datetime.now())
简单创建新实例会返回错误。但在回滚之前工作正常。
from .models import Catalog
name = 'Apple'
rec = Catalog(name=name)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File ".../app/helpers.py", line 31, in create_catalog
rec = Catalog(name=name)
File "<string>", line 2, in __init__
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/orm/instrumentation.py", line 376, in _new_state_if_none
state = self._state_constructor(instance, self)
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 855, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/orm/instrumentation.py", line 202, in _state_constructor
self.dispatch.first_init(self, self.class_)
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/event/attr.py", line 322, in __call__
fn(*args, **kw)
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/orm/mapper.py", line 3360, in _event_on_first_init
configure_mappers()
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/orm/mapper.py", line 3248, in configure_mappers
mapper._post_configure_properties()
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/orm/mapper.py", line 1947, in _post_configure_properties
prop.init()
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/orm/interfaces.py", line 196, in init
self.do_init()
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/orm/relationships.py", line 1860, in do_init
self._process_dependent_arguments()
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/orm/relationships.py", line 1889, in _process_dependent_arguments
setattr(self, attr, attr_value())
File ".../.virtualenvs/.../lib/python3.6/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 294, in __call__
x = eval(self.arg, globals(), self._dict)
File "<string>", line 1, in <module>
AttributeError: 'Table' object has no attribute 'id'
最佳答案
remote_side
参数可以作为可计算字符串传递,您已完成此操作:
remote_side='catalog.id'
问题在于,它所评估的命名空间包含 Table
对象和模型类,而您引用的是 Table
而不是模型类。只需将远程端更改为
remote_side='Catalog.id'
或者直接在类主体中传递id
列:
class Catalog(db.Model):
__tablename__ = 'catalog'
id = db.Column(db.Integer, primary_key=True)
...
categories = db.relationship('Catalog', remote_side=id, backref='parent')
关于python - SQLAlchemy: AttributeError: 'Table' 对象没有属性 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57904984/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!