【问题标题】:Instance of 'SQLAlchemy' has no 'Column' member“SQLAlchemy”的实例没有“列”成员
【发布时间】:2020-12-04 04:21:39
【问题描述】:

我正在使用 python 和烧瓶创建我的第一个后端,我遇到了这个错误: “'SQLAlchemy' 的实例没有 'Column' 成员”。我试图通过在 stackoverflow 中遵循类似的问题来解决这个问题,但它不起作用。 我尝试过的解决方案:

  • 安装了flask-sqlalchemy,

  • 已安装烧瓶,

  • 添加

"python.linting.pylintArgs": [
            "--load-plugins", 
            "pylint-flask-sqlalchemy",
            "pylint-flask"
        ] 

到我的 settings.json 文件,

基本上我关注了这个帖子:Instance of 'SQLAlchemy' has no 'Column' member (no-member) 但没有成功。 我想要实现的实际上只是复制粘贴这个教程: https://www.codementor.io/@dongido/how-to-build-restful-apis-with-python-and-flask-12qto530jd

我已经成功完成了第 5 步,也就是创建模型。

有没有人知道如何解决这个问题的更多信息?

更新: 当我运行程序时,我得到:

Traceback (most recent call last):
File "run.py", line 17, in <module>
app = create_app("config")
File "run.py", line 10, in create_app
from Model import db
File "C:\Users\Madsen\AndroidStudioProjects\JustDoItApp\Backend\Model.py", line 3, in <module>
from flask_marshmallow import Marshmallow
File "C:\Users\Madsen\AndroidStudioProjects\JustDoItApp\Backend\env\lib\site-packages\flask_marshmallow\__init__.py", line 24, in <module> import flask_sqlalchemy  # flake8: noqa
File "C:\Users\Madsen\AndroidStudioProjects\JustDoItApp\Backend\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 39, in <module>
_timer = time.clock
AttributeError: module 'time' has no attribute 'clock'

该程序尚未准备好运行。但是在我正在关注的教程中,这不应该导致错误。 难道是我连接的数据库有问题吗?我正在从 confi.py 像这样连接到我的本地主机 postgresql:

SQLALCHEMY_DATABASE_URI = os.environ.get("postgresql://postgres:password@localhost/BilletApp")

我已经用我的本地主机密码填写了密码字段。 这个数据库没有名为“cmets”的表,就像我试图用这段代码在这里创建的那样:

class Comment(db.Model):
__tablename__ = 'comments'
id = db.Column(db.Integer, primary_key=True)
comment = db.Column(db.String(250), nullable=False)
creation_date = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), nullable=False)
category_id = db.Column(db.Integer, db.ForeignKey('categories.id', ondelete='CASCADE'), nullable=False)
category = db.relationship('Category', backref=db.backref('comments', lazy='dynamic' ))

def __init__(self, comment, category_id):
    self.comment = comment
    self.category_id = category_id.

这可能是问题吗?

【问题讨论】:

  • 是运行程序时出现的错误还是仅在vscode上出现的错误?因为如果它在 vscode 上而不是在实际运行程序时,那么它可能是一些 vscode 设置问题。
  • 感谢您的回复。我将在下面添加运行程序的结果作为答案(?),因为评论太长了。
  • 好吧,我会把它添加到原来的问题中,因为我相信这是正确的做法?
  • @Madsen - 教程中的requirements.txt 指定了 Flask-SQLAlchemy 的 2.3.2 版本,该版本现在已经相当老了。尝试升级到最新版本(当前为 2.4.4)。
  • 感谢您的回复。不幸的是,它并没有解决问题。我借此机会将 requirements.txt 中的所有字段更新到最新版本,没有任何错误,但没有结果。更改后,我还按照另一篇文章中的建议重新加载了窗口。

标签: python postgresql visual-studio-code sqlalchemy flask-sqlalchemy


【解决方案1】:

编辑一个


  • pip install pylint
  • pip install pylint-flask
  • pip install pylint-flask-sqlalchemy

打开 VSCode 并运行 Ctrl+Shift+P(适用于 Windows 用户)

Mac 上的 shift+command+P

  • 在弹出的框上选择‘Python: Enable Linting’,然后选择‘on’

再次运行 Ctrl+Shift+P(对于 Windows 用户)或在 Mac 上运行 shift+command+P

  • 键入“首选项:打开工作区设置”并选择它以打开文件。

  • 将此添加到文件中:

    "python.linting.pylintEnabled": true,
    
    "python.linting.enabled": true,
    
    "python.linting.pylintUseMinimalCheckers": false,
    
    "python.linting.pylintArgs": [
    "--load-plugins",
    "pylint_flask_sqlalchemy, pylint_flask",
    "--init-hook"
    ]
    

好的,所以 Gord Thompson 可能是正确的,但它也可能取决于代码本身。由于我的工作站,现在我无法打开 The Code 教程,如果可以的话,我会尝试(除非以下内容可以解决问题)

现在一步一步

一个

通过查看您收到的错误'模块'时间'没有属性'时钟'':

来自 OS AnswerHere: ---> 贡献者:Abgus Tay

函数 time.clock() 已被删除,自 Python 3.3 起已被弃用:根据您的要求使用 time.perf_counter() 或 time.process_time() 来获得明确定义的行为。

两个

正如我所说,我目前没有看到您正在使用的代码教程,但它可能已经过时了

来自 OS Answer Here ---> 贡献者:Simone Bronzini

db.Column(db.TIMESTAMP, default=datetime.utcnow,server_default=text('0'), nullable=False,)

或需要修改

created_time   = Column(TIMESTAMP, nullable=False, server_default=func.now())
updated_time   = Column(TIMESTAMP, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))

或者不是 TIMESTAMP,为什么不使用 DateTime 代替?

created_date = Column(DateTime, default=datetime.datetime.utcnow)

【讨论】:

  • 感谢您的回复。我尝试导入日期时间,然后使用: db.Column(db.TIMESTAMP, default=datetime.utcnow,server_default=text('0'), nullable=False,) 当我运行程序时出现以下错误: AttributeError:模块'datetime'没有属性'utcnow'我也尝试了你给的最后一个版本,日期时间,默认= datetime.datetime.utcnow,我得到:模块'datetime'没有'utcnow'成员,还有(奇怪)“SQLAlchemy”的实例没有“TIMESTAMP”成员,此外它不会改变错误:“SQLAlchemy”的实例没有“列”成员
  • 这更奇怪.. 好的,我看到你在 VS 代码中运行。如果您在终端中运行该应用程序,它是否会出现同样的问题?您需要查看问题出在哪里,如果您没有收到错误,则更多与 VS 代码相关。如果您仍然收到错误,那么我们现在就在代码中的某个地方
  • 哦,我没有正确导入 i,我在 from datetime import Datetime 中使用了大写 D。当我输入“从日期时间导入日期时间”并运行程序时,我得到以下信息:“AttributeError: type object 'datetime.datetime' has no attribute 'datetime'”
  • 好的尝试这样做,1. pip install pylint-flask-sqlalchemy 2. 将其添加到 VScosde json 设置文件中:"python.linting.pylintArgs": ["--load -plugins", "pylint_flask", "pylint_flask_sqlalchemy"] 顺序很重要
  • 好的。非常感谢您的努力,非常感谢!
【解决方案2】:

我找到的解决方案是将我的 IDE 更改为 PyCharm 而不是 vs code。问题似乎是 pylint 不是最新版本的python,并且也无法理解这个错误将在运行时在虚拟环境中处理,因此错误:“'SQLAlchemy 的实例' 没有 'Column' 成员”,只会突出显示,如上所述,我需要忽略设置中的错误以摆脱烦人的红色下划线。 在 PyCharm 中它似乎知道它将由虚拟环境处理,因此 IDE 不会标记为错误。

【讨论】:

  • 正如我前段时间在我的一条评论中建议的那样,问题出在 vscode 上。我建议暂时搁置它并使用 Pycharm 进行练习,然后如果您可能在新设备中使用 VScode,看看效果如何。这很奇怪,因为它对我有用,而且没有“pylint-flask-sqlalchemy”。很高兴您更新您的问题。
  • 是的,我很抱歉没有相信你的话,哈哈。感谢您的帮助,我可以说是您的建议让我尝试了不同的 IDE。
【解决方案3】:

你检查过Instance of 'SQLAlchemy' has no 'Column' member (no-member)中'np8'的答案吗? 我认为它已经清楚地解释了这个问题。 而且其实是pylint的问题,换个linter就可以解决这个问题,比如flake8、mypy、pydocstyle等。

【讨论】:

  • 感谢您的回复。是的,我已经看到了建议的解决方案,但是据我所见,转向 flake8 或其他 Will 之一,并没有解决问题,而只是忽略它。而且我不太喜欢有被忽略的错误代码。我相信在我的编码过程中可能发生了一些奇怪的事情,所以我目前正在从头开始构建项目,并将查看错误是否再次发生。
  • 跟进:你是绝对正确的,这是 pylint 的问题,但由于某种原因,我无法更改为 flake8,或者只是放弃 pylint,出于某种原因。,我一直收到错误“无法向父数组添加索引”,所以我完全放弃了使用 vs 代码。
猜你喜欢
  • 2019-05-27
  • 2020-05-05
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
相关资源
最近更新 更多