SQLAlchemy“AttributeError:'str'对象没有属性'c'”
Posted
技术标签:
【中文标题】SQLAlchemy“AttributeError:\'str\'对象没有属性\'c\'”【英文标题】:SQLAlchemy "AttributeError: 'str' object has no attribute 'c'"SQLAlchemy“AttributeError:'str'对象没有属性'c'” 【发布时间】:2019-04-27 06:38:48 【问题描述】:我有两个名为 users
和 permissions
的表,我想使用名为 userPermissions
的表在它们之间创建关系。这是我的代码的样子:
我知道我可能不正确地处理关系,但查看文档和搜索,我找不到它是什么。当我尝试使用db.Base.metadata.create_all(db.engine)
创建表时,出现以下错误:
/usr/bin/python3.6 /path/project/out.py
Traceback (most recent call last):
File "/path/project/out.py", line 1, in <module>
from components.database import setup
File "/path/project/components/database/__init__.py", line 41, in <module>
class UserPermission(Base):
File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/api.py", line 65, in __init__
_as_declarative(cls, classname, cls.__dict__)
File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 116, in _as_declarative
_MapperConfig.setup_mapping(cls, classname, dict_)
File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 144, in setup_mapping
cfg_cls(cls_, classname, dict_)
File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 172, in __init__
self._setup_table()
File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 481, in _setup_table
if not table.c.contains_column(c):
AttributeError: 'str' object has no attribute 'c'
问题出在哪里?
【问题讨论】:
【参考方案1】:在您的 UserPermission
课程中,您使用了错误的 dunder 属性:
__table__ = 'userPermissions'
应该是:
__tablename__ = 'userPermissions'
Sqlalchemy 正在尝试将字符串 'userPermissions'
视为 Table
对象。
关于__table__
和__tablename__
之间的区别,大多数情况只需要在声明性类上声明__tablename__ = "stringvalue"
。它表示对象应该引用该名称的表,并且 SQLAlchemy 可以在内部处理该 Table
对象的构造。
在对象上声明 __table__
会向 SQLAlchemy 发出信号,表明您希望控制 ORM 类所代表的 Table
的构造。如果您已经通过其他方式(如表反射)引用了该表,这将是最有用的。更多阅读here.
【讨论】:
【参考方案2】:class UserPermission(Base):
__table__ = 'userPermissions'
这里应该是:
class UserPermission(Base):
__tablename__ = 'userPermissions'
【讨论】:
以上是关于SQLAlchemy“AttributeError:'str'对象没有属性'c'”的主要内容,如果未能解决你的问题,请参考以下文章
从 RDS 检索数据给出 AttributeError: 'sqlalchemy.cimmutabledict.immutabledict' 对象没有属性 'setdefault'
Python SQLAlchemy:AttributeError:'Column'对象和'Comparator'对象都没有属性'schema'
AttributeError:使用flask-sqlalchemy连接到sqlite数据库时无法设置属性
SQLAlchemy AutoMap AttributeError(尽管定义了主键)
如何使用Sqlalchemy中的automap_base处理AttributeError(key)? [重复]
flask wtforms sqlalchemy AttributeError:“str”对象没有属性“_sa_instance_state”