在包含 SQLAlchemy 模型的文件上执行时出现 pydoc 错误

问题描述 投票:0回答:1

我正在尝试使用我的 Windows 计算机在 Python 文件上运行 pydoc。该文件包含 SQLAlchemy 模型,但一直在努力解决错误。

如果我能得到一些指导,我将不胜感激。下面附上:我执行的命令、目标Python文件和我收到的错误。

我的命令如下:

python -m pydoc -w objects

这是我的 Python 文件,objects.py。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os

app = Flask(__name__)
app.app_context().push()
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:mycoolpassword@localhost:5432/mydb'
db = SQLAlchemy(app)

class Book(db.Model):
    """
    Docstring for my class
    Col1
    Col2
    """
    __tablename__ = 'mytable'
    
    col1 = db.Column(db.Integer, primary_key = True)
    col2 = db.Column(db.Integer)

db.drop_all()
db.create_all()

这是我收到的错误。

$ python -m pydoc -w objects
Traceback (most recent call last):
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\pydoc.py", line 2744, in <module>
    cli()
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\pydoc.py", line 2704, in cli
    writedoc(arg)
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\pydoc.py", line 1697, in writedoc
    page = html.page(describe(object), html.document(object, name))
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\pydoc.py", line 380, in document
    if inspect.ismodule(object): return self.docmodule(*args)
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\pydoc.py", line 738, in docmodule
    contents.append(self.document(value, key, name, fdict, cdict))
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\pydoc.py", line 381, in document
    if inspect.isclass(object): return self.docclass(*args)
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\pydoc.py", line 843, in docclass
    for name, kind, cls, value in classify_class_attrs(object)
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\pydoc.py", line 204, in classify_class_attrs
    for (name, kind, cls, value) in inspect.classify_class_attrs(object):
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\inspect.py", line 443, in classify_class_attrs
    srch_obj = getattr(srch_cls, name, None)
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\flask_sqlalchemy\model.py", line 30, in __get__
    return cls.query_class(
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\orm\query.py", line 273, in __init__
    self._set_entities(entities)
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\orm\query.py", line 282, in _set_entities
    self._raw_columns = [
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\orm\query.py", line 283, in <listcomp>
    coercions.expect(
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\coercions.py", line 413, in expect
    resolved = impl._literal_coercion(
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\coercions.py", line 651, in _literal_coercion
    self._raise_for_expected(element, argname)
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\coercions.py", line 1139, in _raise_for_expected
    return super()._raise_for_expected(
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\coercions.py", line 710, in _raise_for_expected
    super()._raise_for_expected(
  File "C:\Users\Boco\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\coercions.py", line 535, in _raise_for_expected
    raise exc.ArgumentError(msg, code=code) from err
sqlalchemy.exc.ArgumentError: Column expression, FROM clause, or other columns clause element expected, got <class 'sqlalchemy.orm.decl_api.Model'>.

我尝试重新安装 Flask 和 SQLAlchemy 并确保所有依赖项(例如 psycopg2-binary)都已安装。

python flask-sqlalchemy pydoc
1个回答
0
投票

似乎 pydoc 在处理具有数据库模型的 Python 文件时存在错误。 我最终使用了 pdoc。

pip install pdoc
pdoc objects.py
© www.soinside.com 2019 - 2024. All rights reserved.