【问题标题】:SQLAlchemy declarative one-to-many not defined errorSQLAlchemy 声明性一对多未定义错误
【发布时间】:2011-05-13 04:18:42
【问题描述】:

我试图弄清楚如何使用 SQLAlchemy 的声明性 ORM 定义一对多关系,并试图让 the example 工作,但我得到一个错误,我的子类不能找到了(自然是因为后来声明了……)

InvalidRequestError:初始化映射器 Mapper|Parent|parent 时,表达式 'Child' 未能找到名称(“名称 'Child' 未定义”)。如果这是一个类名,请考虑在定义了两个依赖类之后将此 relationship() 添加到该类中。

但是我如何定义这个,没有错误?

代码:

from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from dev.historyMeta import VersionedMeta, VersionedListener

global engine, Base, Session
engine = create_engine('mysql+mysqldb://user:pass@localhost:3306/testdb', pool_recycle=3600)
Base = declarative_base(bind=engine, metaclass=VersionedMeta)
Session = sessionmaker(extension=VersionedListener())


class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child", backref="parent")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))

Base.metadata.create_all()

【问题讨论】:

    标签: python database sqlalchemy


    【解决方案1】:

    我是这样做的:

    from sqlalchemy import create_engine
    from sqlalchemy import Column, Integer, ForeignKey
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker, relationship
    
    engine = create_engine('sqlite://', echo=True)
    Base = declarative_base(bind=engine)
    Session = sessionmaker(bind=engine)
    
    
    class Parent(Base):
        __tablename__ = 'parent'
        id = Column(Integer, primary_key=True)
    
    class Child(Base):
        __tablename__ = 'child'
        id = Column(Integer, primary_key=True)
        parent_id = Column(Integer, ForeignKey('parent.id'))
        parent = relationship(Parent, backref='children')
    
    Base.metadata.create_all()
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 2021-11-05
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2015-02-20
      • 2020-03-20
      相关资源
      最近更新 更多