简化,我有以下类结构(在单个文件中):
Base = declarative_base()
class Item(Base):
__tablename__ = 'item'
id = Column(BigInteger, primary_key=True)
# ... skip other attrs ...
class Auction(Base):
__tablename__ = 'auction'
id = Column(BigInteger, primary_key=True)
# ... skipped ...
item_id = Column('item', BigInteger, ForeignKey('item.id'))
item = relationship('Item', backref='auctions')
Run Code Online (Sandbox Code Playgroud)
我从这里得到以下错误:
sqlalchemy.exc.InvalidRequestError
InvalidRequestError: When initializing mapper Mapper|Auction|auction, expression
'Item' failed to locate a name ("name 'Item' is not defined"). If this is a
class name, consider adding this relationship() to the Auction class after
both dependent classes have been …Run Code Online (Sandbox Code Playgroud) 我试图遵循上一个与SQLAlchemy相关的问题中显示的设计模式,并打算在多个文件之间共享一个公共Base实例.完全相同的代码适用于python2和python3.
但是,当我在一个模块(称为模型)中移动文件a.py,b.py,c.py和base.py并添加必要的__init__.py文件时,它继续在python2上工作,但随后产生错误在python3上(详情如下).
我有以下文件:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)
from sqlalchemy import *
from base import Base
from sqlalchemy.orm import relationship
class A(Base):
__tablename__ = "A"
id = Column(Integer, primary_key=True)
Bs = relationship("B", backref="A.id")
Cs = relationship("C", backref="A.id")
Run Code Online (Sandbox Code Playgroud)
from sqlalchemy import *
from base import Base
class B(Base):
__tablename__ = "B"
id = Column(Integer, primary_key=True)
A_id = Column(Integer, ForeignKey("A.id"))
Run Code Online (Sandbox Code Playgroud)
from sqlalchemy import *
from base import Base …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的树,通过多态继承反映:
A
/ | \
B C D
Run Code Online (Sandbox Code Playgroud)
这很好用,例如:
class BaseModel(db.Model): # Table A in diagram
__tablename__ = "entities"
id = db.Column(db.BigInteger, primary_key=True, nullable=False, server_default=func.nextval('guid_seq'))
type_id = db.Column(db.SmallInteger, db.ForeignKey(EntityTypesModel.id))
__mapper_args__ = {
'polymorphic_identity':'entity',
'polymorphic_on':type_id,
'with_polymorphic':'*'
}
class BrandModel(BaseModel): # Table B, C, D in diagram
__tablename__ = 'brands'
id = db.Column(db.BigInteger, db.ForeignKey(StufffModel.id), primary_key=True, nullable=False)
name = db.Column(db.String, nullable=False)
__mapper_args__ = {
'polymorphic_identity':ET_BRAND,
}
Run Code Online (Sandbox Code Playgroud)
问题是我需要反映更像这样的东西:
A
/ | \
B C D
/ \
E F
Run Code Online (Sandbox Code Playgroud)
其中 D 不仅是 A 的多态孩子,也是 …