gpt4 book ai didi

python - SQLAlchemy 需要一个对象,但找到了一个表

转载 作者:太空狗 更新时间:2023-10-29 17:37:15 24 4
gpt4 key购买 nike

我目前正在开始使用 sqlalchemy。在我当前的项目中,我必须用 Flask 做一些工作,而其他部分则通过命令行来做。关于 flask 的部分运行良好,与 sqlalchemy 和所有接口(interface),但命令行部分不是。

我得到的错误是

ArgumentError("Class object expected, got 'Table('documentos', 
MetaData(bind=Engine(postgresql://user:password@localhost/clasificador)),
Column('id', Integer(), table=<documentos>, primary_key=True, nullable=False),
Column('nombre', String(length=248), table=<documentos>), schema=None)'.",)

我已经尝试使用 google 和阅读声明式 sqlalchemy 的运气,但我找不到可能是什么问题。模块中的代码是:

from sqlalchemy.orm import sessionmaker
from db import engine,Base
#some other code
session = sessionmaker(bind=engine)
doc = modelos.documento.Documento(os.path.basename(nelto))
session.add(doc) #here fails
session.remove()

db 是我拥有 sqlalchemy 通用代码的模块。其中大部分来自 flask 文档,而 db_session 仅用于 flask,我为另一个模块创建了一个不同的 session 。

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

sqldebug=True

engine = create_engine(
'postgresql://user:passwd@localhost/clasificador',
convert_unicode=True,
echo=sqldebug)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base(bind=engine)
Base.query = db_session.query_property()

最后,这里是“documento”模块,虽然我怀疑问题出在这里。从 sqlalchemy 导入列、整数、字符串从数据库导入基地

class Documento(Base):
'''Clase definiendo los documentos'''
__tablename__ = "documentos"

id = Column(Integer,primary_key=True)
nombre = Column(String(248))

def __init__(self,nombre):
self.nombre = nombre

def __repr__(self):
return '<Documento %r>' % self.nombre

一些评论/名字是西类牙语,但我认为你可以安全地忽略它们,如果有必要我会做翻译

按照 Lafada 的代码,我创建了另一个文件:

from sqlalchemy.orm import sessionmaker
from modelos.documento import Documento
from db import Base, engine
import os

Session = sessionmaker(bind=engine)
session = Session()
doc = Documento(os.path.basename('/tmp/test.py')) #here fails
session.add(doc)
session.commit()

它运行得很好。我能发现的唯一区别是 session 的创建方式,我在原始代码中也对其进行了修改,但它一直出现相同的错误。

我找到了罪魁祸首,它不在我展示的代码中,而是在另一个试图与其建立关系但链接到表而不是对象的类中。直到我尝试了其他几件事,我才无法追踪到真正的问题

最佳答案

如果我忘记 ForeignKey() 采用数据库表和字段的名称但 relationship() 采用名称而是一个 ORM 类。也就是说,我有时会写:

movie_id = Column(Integer, ForeignKey('movie.id'))
movie = relationship('movie') # WRONG!
# Exception: "SQLAlchemy expects to find an object…"

我应该写的是,假设 movie 是数据库表的名称(不是 SQL 注意表名大写!)并且 Movie 是我的 Python ORM 类的名称是:

movie_id = Column(Integer, ForeignKey('movie.id'))
movie = relationship('Movie') # Works!

关于python - SQLAlchemy 需要一个对象,但找到了一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8170333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com