使用 SQLAlchemy declarative_base() 在 VS Code 中“继承'Base',它不是一个类”
Posted
技术标签:
【中文标题】使用 SQLAlchemy declarative_base() 在 VS Code 中“继承\'Base\',它不是一个类”【英文标题】:"Inheriting 'Base', which is not a class" in VS Code using SQLAlchemy declarative_base()使用 SQLAlchemy declarative_base() 在 VS Code 中“继承'Base',它不是一个类” 【发布时间】:2019-12-04 07:37:47 【问题描述】:VS 代码显示“继承'Base',它不是一个类” 给出以下错误消息:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Integer , String , Column
Base = declarative_base()
class Socio(Base):
__tablename__ = 'socios'
id = Column(Integer, autoincrement = True , primary_key = True)
dni = Column(Integer , unique = True)
nombre = Column(String(250))
apellido= Column(String(250))
为什么会这样?我该如何解决?
【问题讨论】:
不要相信你的 linter(或任何其他 Python 静态分析工具)告诉你的一切:运行代码并查看它是否/如何实际上失败(然后包括您问题中的错误消息),而不是假设 VS Code 告诉您真相。declarative_base()
确实返回了一个类。
...也就是说:您发布的内容实际上并不是来自 Python 的错误。这是来自 VS Code 的警告。请告诉我们你从 Python 得到的实际错误,如果有的话。 (警告不会阻止代码真正运行;它只是表示 VS Code 的分析认为代码可能无法成功运行,但该分析并非来自 Python 本身,而且并不总是正确的) .
感谢您的回答。如果我在 python 终端中运行,我会收到此错误: nombre = Column(String(250)) Traceback (last recent call last): File "from sqlalchemy import Integer, String, Column
?
如果我在终端中运行它,我现在没有错误,但是当我尝试从其他 .py 文件导入“Socio”时,我收到此错误:“文件”/home/gastonpalav/Workspace/frro -soporte-2019-08/practico_05/ejercicio_02.py",第 6 行,在
Inheriting 'Base', which is not a class
实际上并不是一个错误。
相反,它是来自 Microsoft 的 Python 语言服务器的静态分析结果(该服务器又严重依赖 pylint
)进行此类分析。它并不总是准确的:如果一个类是由函数动态生成和返回的(就像这里的情况),静态检查工具可能无法正确理解它的类型。
如microsoft/python-language-server#1390
中所述,可以通过以下设置更改禁用此功能:
"python.analysis.disabled": [
"inherit-non-class"
],
【讨论】:
谢谢。我的flask-sqlalchemy模型文件出现了这个错误,这个文件已经处理好了。我从来没有遇到过它正常运行的问题。【参考方案2】:从 VS Code 1.47 开始,当使用 Marshmallow 序列化/反序列化 SQLAlchemy 对象并从 marshmallow_sqlalchemy.SQLAlchemyAutoSchema
继承时,使用来自 other answer 的解决方案:
"python.analysis.disabled": [
"inherit-non-class"
],
似乎不再起作用(即,您仍然会收到“ma.SQLAlchemyAutoSchema',它不是一个类。”警告)。您可以改为在特定行上使用更通用的 #noqa
注释:
ma = Marshmallow(app)
class UserSchema(ma.SQLAlchemyAutoSchema): # noqa
class Meta:
model = Person
sqla_session = db.session
但请注意,VS Code 将 #noqa
视为该行的全部禁用设置。
【讨论】:
以上是关于使用 SQLAlchemy declarative_base() 在 VS Code 中“继承'Base',它不是一个类”的主要内容,如果未能解决你的问题,请参考以下文章